spring boot之图片上传返回文件路径和文件名

之前做学校的项目需要用到图片上传功能,项目比较小就只用到springboot+mybatis框架,在网上找了很长时间的springboot图片上传功能,一直都没有找到,并不是说找到的demo不行,而是demo太多了,找不到适合这种小项目的。
在坚持不懈的找demo中找到了一个作者的demo完美适合我的校内项目,在这里我就在完善一下原作者的demo.顺便感谢一下原作者。

原作者 https://www.cnblogs.com/LULULI/p/10571517.html

代码
一.application.properties配置

#图片上传配置
#是否启用文件上传功能
spring.servlet.multipart.enabled=true
#指定文件的位置, 没有指定时会自动创建一个临时文件夹
spring.servlet.multipart.location=D:/git-depository/upload
#指定上传文件大小, 默认1M
spring.servlet.multipart.max-file-size=20MB
#指定multipart / form-data请求允许的最大大小, 默认10M
spring.servlet.multipart.max-request-size=20MB
#图片上传路径映射 自定义属性
upload.picture.path=D:/git-depository/upload

二.三个工具类
FileNameUtil

   //生成新的文件名
    public class FileNameUtil {
        /**
         * 获取文件后缀
         * @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() + FileNameUtil.getSuffix(fileOriginName);
        }
    }

FileUploadUtil
这里需要导入的三个包
import java.io.File;
import java.io.IOException;
import org.springframework.web.multipart.MultipartFile;

multipart.MultipartFile感兴趣的小伙伴可以去看看。

 public class FileUploadUtil {
    /**
     *
     * @param file 文件
     * @param path   文件存放路径
     * @param fileName 原文件名
     * @return
     */
    public static boolean upload(MultipartFile file, String path, String fileName) {

        // 生成新的文件名
        String realPath = path + "/" +fileName;

        //使用原文件名
        // String realPath = path + "/" + fileName;

        File dest = new File(realPath);
        //判断文件父目录是否存在
        if(!dest.getParentFile().exists()){
            dest.getParentFile().mkdir();
        }
        try {
            //保存文件
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

    }
}

UUIDUtils

//使用UUID来对图片名称进行重新生成。
public class UUIDUtils {
    public static String getUUID(){
        return UUID.randomUUID().toString().replace("-", "");
    }
}

一个配置类
UploadFileConfig
记得加上@Configuration注解。
这个主要是用来给图片一个虚拟路径,将虚拟路径映射到此图片存放位置。

@Configuration
public class UploadFileConfig extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/images/**").addResourceLocations("D:/git-depository/upload");
        super.addResourceHandlers(registry);
    }

}

PhotoController
这里需要去添加springfox-swagger2依赖包,否则 @ApiOperation,@ApiImplicitParam注解无法使用。
怕有些小伙伴没copy懂,jsonutil自己写的一个工具类,用来返还url给前端。

@Controller
public class PhotoController {

@ApiOperation("图片上传")
@ApiImplicitParam(name = "file", value = "文件", required = true, dataType = "File")
@RequestMapping("/upload")
@ResponseBody
public JSONObject upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {


    JSONUtil jsonUtil=new JSONUtil();
    //定义要上传文件 的存放路径
    String localPath="D:/git-depository/upload";
    //获得文件名字
    String fileName=file.getOriginalFilename();
    //文件名=localpath+fileName
    File dest = new File(localPath + fileName);
    if(FileUploadUtil.upload(file, localPath, fileName)){
        // 将上传的文件写入到服务器端文件夹
        // 获取当前项目的完整url
        String requestURL = request.getRequestURL().toString();
        // 获取当前项目的请求路径url
        String requestURI = request.getRequestURI();
        // 得到去掉了uri的路径
        String url = requestURL.substring(0, requestURL.length()-requestURI.length() + 1);
        url= localPath+fileName;


        return  jsonUtil.success(url);

    }
    return jsonUtil.fail("未知错误");
  }
 }

大概就这样,直接cv过去就能用的简单明了。
测试:.
在head把Content-Type勾去掉
在这里插入图片描述

在这里插入图片描述

这是后端的,前端怎么用改天在写了。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值