文件修改后保存(以图片为例子)
小伙伴们大叫好,今天带来的是文件修改后保存后端接口的代码!
话不多说;直接上你们想要的干货代码!
1. 首先是controller的代码
FileDate是前端传过来的,里面包含文件id和文件的base64两个数据
@PostMapping("/save")
public Result save(@RequestBody FileDate fileDate, HttpServletRequest request){
String base64 = fileDate.getBase64();
Integer id = fileDate.getId();
MultipartFile file = fileService.Base64ToMultipartFile(base64);
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
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.setUrl(url);
filePojo.setId(id);
Result update = fileService.update(filePojo);
if(1000 == update.getCode()){
return result.Success(filePojo);
}else {
return update;
}
} catch (IOException e) {
return result.Fail(e.getMessage());
}
}
2. 接下来是serviceImpl的代码
@Override
public MultipartFile Base64ToMultipartFile(String base64) {
final String[] base64Array = base64.split(",");
// base64转为流
String dataUir = base64Array[0];
String data = base64Array[1];
MultipartFile multipartFile = new Base64ToMultipartFile(data, dataUir);
return multipartFile;
}
3. 接下来是Base64ToMultipartFile工具类的代码
package com.example.photovue.util;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/**
* @Title:
* @Description:
* @Author: WKN
* CreateDate: 2022/9/22 16:08
*/
public class Base64ToMultipartFile implements MultipartFile{
private final byte[] fileContent;
private final String extension;
private final String contentType;
/**
* @param base64
* @param dataUri 格式类似于: data:image/png;base64
*/
public Base64ToMultipartFile(String base64, String dataUri) {
this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
this.extension = dataUri.split(";")[0].split("/")[1];
this.contentType = dataUri.split(";")[0].split(":")[1];
}
public Base64ToMultipartFile(String base64, String extension, String contentType) {
this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));
this.extension = extension;
this.contentType = contentType;
}
@Override
public String getName() {
return "param_" + System.currentTimeMillis();
}
@Override
public String getOriginalFilename() {
return "file_" + System.currentTimeMillis() + "." + extension;
}
@Override
public String getContentType() {
return contentType;
}
@Override
public boolean isEmpty() {
return fileContent == null || fileContent.length == 0;
}
@Override
public long getSize() {
return fileContent.length;
}
@Override
public byte[] getBytes() throws IOException {
return fileContent;
}
@Override
public ByteArrayInputStream getInputStream() throws IOException {
return new ByteArrayInputStream(fileContent);
}
@Override
public void transferTo(File file) throws IOException, IllegalStateException {
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(fileContent);
}
}
}
该接口的mapper和xml太简单就不列出来了,代码还可以优化,可以自己优化哟!
完结!