文件上传(以图片为例子)
小伙伴们大叫好,今天带来的是文件上传的后端接口的代码!
话不多说;直接上你们想要的干货代码!
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>
完结!