文件上传后台接口

180 阅读2分钟

文件上传(以图片为例子)

小伙伴们大叫好,今天带来的是文件上传的后端接口的代码!
话不多说;直接上你们想要的干货代码!

1. 首先是controller的代码

controller的代码很详细了,注释也很详细,还是要强调下,如果在idea的run/debug的configuration中未定义一个workplace directory的话,如果上传过图片,然后重启后台项目的话,之前上传过的图片就会加载不出来,因为临时的url会在每次重启后台项目会变化,所以必须设置一个工作区,public和static必须要有一个。

package com.example.photovue.controller;

import com.example.photovue.entity.FilePojo;
import com.example.photovue.result.Result;
import com.example.photovue.service.FileService;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;


/**
 * @author WKN
 * @version 1.0
 * @description: TODO
 * @date 2022/9/8 14:51
 */
@RestController
@RequestMapping("/file")
public class FileUploadController {

    @Resource
    private FileService fileService;
    Result result = new Result();

    @PostMapping("/upload")
    public Result fileUpload(MultipartFile file, HttpServletRequest request) {
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        /*if (!originalFilename.endsWith(".jpg")) {
            return result.Fail("文件类型不正确");
        }*/

        // realPath获取的是一个临时文件夹的地址   未设置工作区的时候重启项目图片会加载不出来
        // 已经通过在debug的configuration里面设置了tomcat的工作区   保证每次加载图片的地址不会发生变化
        String realPath = request.getServletContext().getRealPath("/");
        File folder = new File(realPath);
        if (!folder.exists()) {
            folder.mkdirs();
        }
        String newName = UUID.randomUUID() + suffix;
        try {
            //transferTo用于把图片上传到指定磁盘
            file.transferTo(new File(folder, newName));

            String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/" + newName;
            FilePojo filePojo = new FilePojo();
            filePojo.setFileName(originalFilename);
            filePojo.setUrl(url);
            return fileService.fileUpload(filePojo);
        } catch (IOException e) {
            return result.Fail(e.getMessage());
        }
    }

    @GetMapping("/getAll")
    public Result getAll(){
        List<FilePojo> all = fileService.getAll();
        return result.Success(all);
    }

}

2. 接下来是serviceImpl的代码

package com.example.photovue.service.impl;

import com.example.photovue.entity.FilePojo;
import com.example.photovue.mapper.FileMapper;
import com.example.photovue.result.Result;
import com.example.photovue.service.FileService;
import com.example.photovue.util.Base64ToMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Title:
 * @Description:
 * @Author: WKN
 * CreateDate: 2022/9/16 9:51
 */
@Service
public class FileServiceImpl implements FileService {

    private Result result = new Result();
    @Resource
    private FileMapper fileMapper;

    @Override
    public Result fileUpload(FilePojo filePojo) {
        int i = fileMapper.fileUpload(filePojo);
        if(i > 0) {
            return result.Success("上传成功");
        }
        return result.Fail("上传失败");
    }

    @Override
    public List<FilePojo> getAll() {
        List<FilePojo> all = fileMapper.getAll();
        return all;
    }
}

3. 接下来是service的代码

package com.example.photovue.service;

import com.example.photovue.entity.FilePojo;
import com.example.photovue.result.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Title:
 * @Description:
 * @Author: WKN
 * CreateDate: 2022/9/16 9:51
 */
public interface FileService {

    Result fileUpload(FilePojo filePojo);

    List<FilePojo> getAll();

}

4. 接下来是mapper接口和xml的代码

package com.example.photovue.mapper;

import com.example.photovue.entity.FilePojo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @Title:
 * @Description:
 * @Author: WKN
 * CreateDate: 2022/9/16 9:48
 */
@Mapper
public interface FileMapper {

    int fileUpload(FilePojo filePojo);

    List<FilePojo> getAll();

}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.photovue.mapper.FileMapper">


    <insert id="fileUpload" parameterType="filePojo">
        insert into file (id, fileName, url)
        values (#{id}, #{fileName}, #{url})
    </insert>


    <select id="getAll" resultType="filePojo">
        select id, fileName, url
        from file
    </select>
</mapper>

完结!