错误原因:

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 》 的坑的更多相关文章

  1. 关于Java数据转存的中MultipartFile转File的问题(转)

    转自http://www.cnblogs.com/zuoxiaoxia/p/6116942.html 错误背景:由于文件储存在第三方的服务器上,所有需要讲将接收到MultipartFile文件 转换为 ...

  2. [转]spring MultipartFile 转 File

    原文地址:https://www.jianshu.com/p/6cf99d39e170 File.createTempFile(String prefix, String suffix); 创建一个临 ...

  3. Springmvc 上传文件MultipartFile 转File

    转自:http://blog.csdn.net/boneix/article/details/51303207 业务场景:ssm框架 上传文件到应用服务器过程中要传到专有的文件服务器并返回url进行其 ...

  4. Multipartfile与File类型相互转换

    特殊情况下需要做转换 1.M转F File file = new File(path); FileUtils.copyInputStreamToFile(multipartFile.getInputS ...

  5. SpringMVC 上传文件 MultipartFile 转为 File

    在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文 ...

  6. spring MVC 的MultipartFile转File读取

    转自:http://www.cnblogs.com/hahaxiaoyu/p/5102900.html 第一种方法:   MultipartFile file = xxx;         Commo ...

  7. MultipartFile 转换为File

    选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 . MultipartFile multipartFile; File fil ...

  8. springmvc 中将MultipartFile转为file,springboot 注入CommonsMultipartResolver

    第一种方法: MultipartFile file = xxx; CommonsMultipartFile cf= (CommonsMultipartFile)file; DiskFileItem f ...

  9. springmvc文件上传 参数为MultipartFile 转换为File

    package cn.com.mcd.controller;import java.io.File;import java.io.IOException;import java.io.Serializ ...

  10. spring MVC 的MultipartFile转File??

    MultipartFile file = xxx;         CommonsMultipartFile cf= (CommonsMultipartFile)file;         DiskF ...

随机推荐

  1. 【难受】SpirngCloud-Alibaba-nacos跨服务器访问接口的问题

    原想法:我首先准备了 一个网关 2个服务 分别将两个服务部署到不同的远程服务器当中 实现跨服务器访问接口 网关为本地调用--这里就不一一介绍了 问题 利用gateway做路由时出现服务不可用的情况,看 ...

  2. Linux的发行版及其描述

    Linux的十种发行版及其描述 linux其中十种发行版本为Debian.Gentoo.Ubuntu.Damn Vulnerable Linux.红帽企业级Linux. CentOS.Fedora.K ...

  3. WMTS地图服务每一层级分辨率

    目录 1. 概述 2. 详论 2.1. Web墨卡托 2.2. 大地经纬度 3. 参考 1. 概述 WMTS地图服务每一层级的分辨率是多少?关于这个问题以前推算过,但总是忘记了.网上查询又是一堆废话, ...

  4. 你要了解的 OpenAI 那些事:创立简史,技术背景等

    原文: https://openaigptguide.com/what-is-openai/ OpenAI 是一家人工智能研究公司,成立于2015年,总部位于美国旧金山.目前,OpenAI由创始人Sa ...

  5. MySQL篇:第六章_详解mysql视图

    周末有朋友来上海没来得及更新,特此更两篇以正身 视图 含义:理解成一张虚拟的表 视图和表的区别: 使用方式 占用物理空间 视图 完全相同 不占用,仅仅保存的是sql逻辑 表 完全相同 占用 视图的好处 ...

  6. CNCF首个云原生多云容器编排项目Karmada正式晋级孵化

    文分享自华为云社区<CNCF首个云原生多云容器编排项目Karmada正式晋级孵化]>,作者:云容器大未来. 近日,云原生计算基金会(CNCF)宣布,CNCF技术监督委员会(TOC)已投票通 ...

  7. 应对全场景AI框架部署挑战,MindSpore“四招”让你躺平

    摘要:所谓全场景AI,是指可以将深度学习技术快速应用在云边端不同场景下的硬件设备上,包括云服务器.移动终端以及IoT设备等等,高效运行并能有效协同. 本文分享自华为云社区<AI框架的挑战与Min ...

  8. java算法易筋经:常见java-API使用技巧

    摘要:算法练习的本质也在于锻炼编程思维,强化程序员的内力.因此给自己后面会持续更新的算法技巧内容简称算法易筋经. 本文分享自华为云社区<<java算法易筋经>之常见java-API使 ...

  9. 云图说丨每个成功的业务系统离不开API网关(APIG)的保驾护航

    摘要:华为云API网关(APIG)是为企业开发者及合作伙伴提供的高性能.高可用.高安全的API托管服务, 帮助企业轻松构建.管理和部署不同规模的API. 本文分享自华为云社区<[云图说]第243 ...

  10. 探索SaaS产业发展新机遇|鲁班会贵安首秀圆满收官

    摘要:2021年12月28日-12月29日,华为云·核心伙伴开发者训练营(第八期)-SaaS应用构建实践专场在华为贵安数据中心召开. 当前,在数字化新兴技术和数字化转型的热潮的引领下,SaaS业务应用 ...