MultipartFile upload

2024-04-09 16:32
文章标签 upload multipartfile

本文主要是介绍MultipartFile upload,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天在使用Spring MVC 进行文件上传时提示出如下错误:

 

java.lang.IllegalStateException: File has been moved - cannot be read again
at org.springframework.web.multipart.commons.CommonsMultipartFile.getBytes(CommonsMultipartFile.java:108) ~[spring-web-3.2.4.RELEASE.jar:3.2.4.RELEASE]
......

 在网上查了一下File has been moved - cannot be read again 错误都说将以下的maxInMemorySize改大就可以了。改了以后发现确实可以了,但是为什么呢?

 

 

<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <property name="defaultEncoding" value="utf-8"></property>//允许最大可上传的文件大小<property name="maxUploadSize" value="10485760000"></property>//上传文件超出这个大小就会用于创建临时文件存储,而不使用内存存储<property name="maxInMemorySize" value="4194304"></property>
</bean>

 其中三个参数如下所示:

 

/*** Set the maximum allowed size (in bytes) before uploads are refused. * -1 indicates no limit (the default).* @param maxUploadSize the maximum upload size allowed * @see org.apache.commons.fileupload.FileUploadBase#setSizeMax*/public void setMaxUploadSize(long maxUploadSize) {this.fileUpload.setSizeMax(maxUploadSize);}
/*** Set the maximum allowed size (in bytes) before uploads are written to disk.* Uploaded files will still be received past this amount, but they will not be* stored in memory. Default is 10240, according to Commons FileUpload.* @param maxInMemorySize the maximum in memory size allowed* @see org.apache.commons.fileupload.disk.DiskFileItemFactory#setSizeThreshold*/ public void setMaxInMemorySize(int maxInMemorySize) {this.fileItemFactory.setSizeThreshold(maxInMemorySize);}

从以上内容可以分析出,实际进行修改maxInMemorySize并没有解决掉 File has been moved - cannot be read again问题,而是避开了这个问题。将文件流不再写入到临时文件,而是用内存存储。

 

以下留下我的解决办法不依赖maxInMemorySize,不过这个方法是根据业务而定的,首先要找到生成的临时文件被使用的地方,由于我的业务上先将MultipartFile写成了文件,然后又尝试用MultipartFile.getBytes()进行读取该文件类型,所以出现此问题,代码如下所示:

错误代码:

public String uploadFile(MultipartFile file,String filePath) {....//创建原图file.transferTo(new File(filePath));// 图片上传 类型String fileType = readPictureType(file);......
}

改正后代码:

public String uploadFile(MultipartFile file,String filePath) {....// 图片上传 类型String fileType = readPictureType(file);//创建原图file.transferTo(new File(filePath));......
}

 

 

 

 

 

 

 

 

 

这篇关于MultipartFile upload的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888653

相关文章

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

使用Vant Uploader 文件上传,后端java中MultipartFile接收不到文件问题解决

问题 在Uploader组件 after-read回调函数将获取的file对象上传到服务器。 <van-uploader:after-read="uploadFile"/>uploadFile(file) {const data = new FormData();data.

VUE饿了么UPload组件自定义上传

代码: 1.视图: <el-dialog :title="dialogTitle" width="30%" :visible.sync="dialogFormVisible" :destroy-on-close="true"><el-form ref="fileForm" class="items-align" ><el-form-item><el-upload:limit="1"class

net::ERR_UPLOAD_FILE_CHANGED

出现该错误的场景:由于上传一个文件后,对文件内容进行修改后,再对该文件进行上传。不会进后端接口,直接返回失败,浏览器会报上诉错误。 出现原因: 以下是ai的回答net::ERR_UPLOAD_FILE_CHANGED 错误表明在尝试上传文件时,文件的内容发生了变化,但浏览器检测到文件的元数据(如大小或修改日期)已更改。这通常发生在文件正在上传过程中被其他应用程序修改时。 解决方法: 给上传

用友UFIDA NC portal/pt/file/upload接口存在任意文件上传漏洞 附POC

@[toc] 用友UFIDA NC portal/pt/file/upload接口存在任意文件上传漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 用友UFIDA NC 简介 微信公众号搜索:南风漏洞复现文库 该文

上传文件,org.springframework.web.multipart.MultipartFile 为何可重复读(重复获取getInputStream())

问题引出: 我们知道有些流是可以读一次,有些可以重复读:原理参看java io流可重复读与不可重复读_GOODDEEP-CSDN博客   debug发现,在上传文件时的MultipartFile 实例的实现类为​org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.StandardM

vue el-upload 文件导入

<el-upload class="upload-idCardFile"action="接口地址":headers="headers":on-success="handleUpLoadIdcardFile":on-error="handleUploadIdcardFail":before-upload="beforeUpload"accept=".xls,.xlsx":data="{额外参

【靶场】upload-labs-master(前11关)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 【靶场】upload-labs-master(前11关) 第一关 Pass-01第二关 Pass-02第三关 Pass-03第四关 Pass-04第五关 Pass-05第六关 Pass-06第七关 Pass-07第八关 Pass-08第九关 Pass-09第十关 Pass-10第

PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0

服务器突然出现这种提示,无法上传文件和图片,怎么解决? PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0 1.因为php.ini中没有设置上传的临时文件,默认为系统的临时文件地址。 2.如果没有权限去读系统的临时文件目录的话就会产生上述错误。 解决的方法就

upload-labs-master靶场通关攻略

第一关 上传并进行抓包,修改后缀为php 第二关 抓包修改后缀 第三关 改后缀为php3 第4关 使用Apache的配置文件.htaccess来上传文件 然后再上传php文件 第5关 使用.user.ini来上传文件 然后再上传jpg文件 访问upload目录下的readme.php文件 第6关 大小写绕过 第7关 空