关于《 MultipartFile 的 file.transferTo 》 的坑
错误原因:
Controller只能接收一次 MultipartFile的文件,
如果再将接收的 MultipartFile文件 传递给 其他的service ,
那么其他的 service 则获取不到这个 MultipartFile 文件 。 因为第一次接收会将MultipartFile文件放在一个临时区域,再将这个文件作为参数传递给其他的Service则会访问不到。
解决方法:
将 MultipartFile 转为 File 类型 传递即可
接下来,会通过案例来演示下这个问题的解决思路 :
演示的案例的功能描述:
用户注册时传入基本信息和 "头像图片文件" , 为了方便,就编写了一个 FileController的类:用于 保存图片并返回存储图片的地址 ,存储到用户的数据库中
具体代码如下:
一,用户的服务
Controller层 : UserController.java
/**
* 新增数据
*
* @param user 实体
* @param file 上传的头像图片
* @return 新增结果
*/
@ApiOperation("新增用户")
@PostMapping("add")
public ResponseData add(User user, MultipartFile file) {
return this.userService.insert(user,file);
}
Service层 : UserService.java
/**
* 新增数据
*
* @param user 实例对象
* @param file 上传的头像图片
* @return 实例对象
*/
ResponseData insert(User user, MultipartFile file);
Service实现层: UserServiceImpl.java
/**
* 新增数据
*
* @param user 实例对象
* @param file 上传的头像图片
* @return 实例对象
*/
@Override
public ResponseData insert(User user, MultipartFile file) {
//图片上传返回的路径
String imgPath= "";
if (file != null) {
String username = user.getName();
// 获取文件类型
File tempFile = transferToFile.transferToFile(file);
String fileType = FileUtil.getType(tempFile);
String dirPath = "user/" + username + "/avatar/";
String fileName = UUID.randomUUID() + "." + fileType; /**
* MultipartFile 文件只能接收一次,如果再以 MultipartFile 转给 其他的service , 那么其他的service 则获取不到这个 MultipartFile 文件
* 可以将 MultipartFile 转为 File 类型 传递即可
*/
imgPath = fileService.upload(tempFile, dirPath, fileName);
} user.setAvatar(imgPath);
user.setCreateTime(new Date());
this.userDao.insert(user);
return new ResponseData(ResponseDataEnum.Success);
}
二,文件服务
Service层: FileService.java
/**
* 文件上传。
* @param file
* @param dirPath
* @param fileName
* @return
*/
public String upload(File file, String dirPath, String fileName);
Service实现层: FileServiceImpl.java
@Override
public String upload(File file, String dirPath, String fileName) {
dirPath = uploadPath + dirPath;
fileName = dirPath + fileName;
File filePath = new File(fileName);
if (!filePath.getParentFile().exists()) {
filePath.getParentFile().mkdirs();
}
try { FileInputStream fis = null;
fis = new FileInputStream(file); FileUtils.copyInputStreamToFile(fis, filePath);// 复制临时文件到指定目录下 } catch (Exception e) {
e.printStackTrace();
}
return null;
}
关于《 MultipartFile 的 file.transferTo 》 的坑的更多相关文章
- 关于Java数据转存的中MultipartFile转File的问题(转)
转自http://www.cnblogs.com/zuoxiaoxia/p/6116942.html 错误背景:由于文件储存在第三方的服务器上,所有需要讲将接收到MultipartFile文件 转换为 ...
- [转]spring MultipartFile 转 File
原文地址:https://www.jianshu.com/p/6cf99d39e170 File.createTempFile(String prefix, String suffix); 创建一个临 ...
- Springmvc 上传文件MultipartFile 转File
转自:http://blog.csdn.net/boneix/article/details/51303207 业务场景:ssm框架 上传文件到应用服务器过程中要传到专有的文件服务器并返回url进行其 ...
- Multipartfile与File类型相互转换
特殊情况下需要做转换 1.M转F File file = new File(path); FileUtils.copyInputStreamToFile(multipartFile.getInputS ...
- SpringMVC 上传文件 MultipartFile 转为 File
在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文 ...
- spring MVC 的MultipartFile转File读取
转自:http://www.cnblogs.com/hahaxiaoyu/p/5102900.html 第一种方法: MultipartFile file = xxx; Commo ...
- MultipartFile 转换为File
选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 . MultipartFile multipartFile; File fil ...
- springmvc 中将MultipartFile转为file,springboot 注入CommonsMultipartResolver
第一种方法: MultipartFile file = xxx; CommonsMultipartFile cf= (CommonsMultipartFile)file; DiskFileItem f ...
- springmvc文件上传 参数为MultipartFile 转换为File
package cn.com.mcd.controller;import java.io.File;import java.io.IOException;import java.io.Serializ ...
- spring MVC 的MultipartFile转File??
MultipartFile file = xxx; CommonsMultipartFile cf= (CommonsMultipartFile)file; DiskF ...
随机推荐
- python tkinter使用(四)
python tkinter使用(四) 本篇文章主要讲下tkinter 的文本框相关. tkinter中用Entry来实现输入框,类似于android中的edittext. 具体的用法如下: 1:空白 ...
- 【scikit-learn基础】--『监督学习』之 随机森林回归
随机森林回归(Random Forest Regression)是一种在机器学习领域广泛应用的算法,由美国科学家 Leo Breiman 在2001年提出.它是一种集成学习方法,通过整合多个决策树的预 ...
- MinIO FTP 断点续传
MinIO FTP 断点续传 对于minio来说,使用minio官方的Java SDK和开启FTP都是不支持断点续传的.对于要实现http接口的断点续传,可以通过调用Amazon S3 REST AP ...
- 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2
在 Part 1 中,我们一起了解了什么是 Prometheus 和 Grafana,以及使用这些工具的前提条件和优势.在本部分,将继续带您学习如何安装 Helm 以及如何使用 Prometheus ...
- JVM学习-程序编译与优化
原文链接:https://gaoyubo.cn/blogs/89d6d9be.html 一.前端编译与优化 Java技术下讨论"编译期"需要结合具体上下文语境,因为它可能存在很多种 ...
- nginx 超时
知识点小记,nginx默认1min超时返回,nginx.conf->http中添加: proxy_read_timeout 600; *600就是10分钟,理论上后台接口不应该这么搞,但实际上项 ...
- 将模型转为NNIE框架支持的wk模型第一步:tensorflow->caffe
摘要:本系列文章旨在分享tensorflow->onnx->Caffe->wk模型转换流程,主要针对的是HI3516CV500, Hi3519AV100 支持NNIE推理框架的海思芯 ...
- 探索SaaS产业发展新机遇|鲁班会贵安首秀圆满收官
摘要:2021年12月28日-12月29日,华为云·核心伙伴开发者训练营(第八期)-SaaS应用构建实践专场在华为贵安数据中心召开. 当前,在数字化新兴技术和数字化转型的热潮的引领下,SaaS业务应用 ...
- 强强联合,ByteHouse 携手亚马逊云科技,新一代云数仓服务重磅升级
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着全球化的发展,越来越多的中国企业开始涉足海外市场,开展跨境业务.在这个过程中,强大的数据分析能力是出海企业不可 ...
- NLog.config 配置
NLog.confg 参考配置, NLog 热生效不需要重启服务 <?xml version="1.0" encoding="utf-8" ?> & ...