问题由来:
用户个人信息需要添加头像功能
当前端程序是微信小程序时,前端将直接将图片 url 传送至服务端
但是当前端是 Web 页面时,前端传递的参数是一张图片,服务端需要将图片保存至 Linux 服务器的某个文件夹下,并将该图片的访问路径保存至数据库中。
pom.xml
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
application.properties
# 自定义文件上传路径
# Linux
#web.upload-path=/root/photo
# Windows 10
web.upload-path=E:/image
server.port=8989
FileNameUtils: 生成新的文件名(利用 UUID 防止重名)
package com.example.post.util;
/**
* @Auther: wyx
* @Date: 2019-04-08 10:08
* @Description:
*/
public class FileNameUtils {
/**
* 获取文件后缀
* @param fileName
* @return
*/
public static String getSuffix(String fileName){
return fileName.substring(fileName.lastIndexOf("."));
}
/**
* 生成新的文件名
* @param fileOriginName 源文件名
* @return
*/
public static String getFileName(String fileOriginName){
return UUIDUtils.getUUID() + FileNameUtils.getSuffix(fileOriginName);
}
}
FileUtils: 上传图片的具体逻辑
package com.example.post.util;
import java.io.File;
import java.io.IOException;
import org.springframework.web.multipart.MultipartFile;
/**
* @Auther: wyx
* @Date: 2019-04-08 10:10
* @Description:
*/
public class FileUtils {
/**
*
* @param file 文件
* @param path 文件存放路径
* @param fileName 原文件名
* @return
*/
public static String upload(MultipartFile file, String path, String fileName){
String newFileName = FileNameUtils.getFileName(fileName);
// 生成新的文件名
String realPath = path + "/" + newFileName;
File dest = new File(realPath);
//判断文件父目录是否存在
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdir();
}
try {
//保存文件
file.transferTo(dest);
return newFileName;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
FileUploadController
package com.example.post.controller;
import com.example.post.util.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
/**
* @Auther: wyx
* @Date: 2019-04-08 10:13
* @Description:
*/
@Controller
public class FileUploadController {
@Value("${web.upload-path}")
private String path;
/**
*
* @param file 上传的文件
* @return
*/
@ResponseBody
@RequestMapping("/fileUpload")
public String upload(@RequestParam("file") MultipartFile file){
//1定义要上传文件 的存放路径
String localPath="E:/image";
// String localPath = "/root/photo";
//2获得文件名字
String fileName=file.getOriginalFilename();
//2上传失败提示
String warning="";
String newFileName = FileUtils.upload(file, localPath, fileName);
if(newFileName != null){
//上传成功
warning="上传成功";
}else{
warning="上传失败";
}
System.out.println(warning);
return warning;
}
}
运行后利用 Postman 进行本地测试,则设置的路径下出现了该图片,需要上传至 Linux 服务器时,只需要将上传路径修改即可
GitHub地址:
https://github.com/Wyxwx/PictureUploadDemo
参考博文:
https://blog.csdn.net/qq_39529566/article/details/81872062
版权声明:本文为Wyx_wx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。