今天在使用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)); ...... }
相关推荐
在IT行业中,文件的安全传输和存储是至关重要的。在这个小实例中,我们关注的是如何对上传的文件进行加密处理,确保其在传输过程中的安全。本文将深入探讨这个主题,详细解释加密和压缩的原理,以及如何实现这两个...
public R addPost(@RequestPart("post") Post post, @RequestParam("upload") MultipartFile upload) throws IOException { // 图片处理代码... // 插入启示到数据库 int num = postService.insert(post); if ...
public String fileUpload(HttpServletRequest request, MultipartFile upload) throws Exception { // 获取上传文件的路径 String path = request.getSession().getServletContext().getRealPath("/upload/"); ...
@PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // 存储文件到服务器或其他操作 } ...
private MultipartFile upload; public String query() { // 查询附件列表逻辑 return "query"; } public String save() { // 上传并保存附件到数据库 return "save"; } public String delete() { ...
`webupload`可能是`webuploader`的实例或配置文件,用于配置上传行为,如上传URL、文件类型限制、并发上传的数量等。 总结来说,`MultipartFile`是Spring框架处理多文件上传的核心工具,结合前端的文件选择和`...
@PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 这里可以对file进行处理 } ``` 接下来,使用Apache POI库解析Excel文件。POI提供了HSSFWorkbook(用于...
@PostMapping("/upload") public String handleFileUpload(@RequestParam("images") MultipartFile[] files) { // 处理文件上传的逻辑 } ``` 接下来,我们需要对每张图片进行验证,检查文件是否为空、大小是否超过...
本知识点主要聚焦于如何在Android中实现单文件和多文件的上传,以及后台使用`MultipartFile`类进行处理的方式。`MultipartFile`是Spring框架中的一个接口,常用于处理HTTP请求中的多部分(multipart)数据,包括文件...
在SpringMVC中,`MultipartFile`接口是处理文件上传的核心组件。本文将深入探讨如何使用`MultipartFile`实现文件上传,以及如何结合FTP服务器进行跨服务器文件传输。 首先,要启用SpringMVC的文件上传功能,我们...
在本文中,我们将深入探讨Spring框架中的`MultipartFile`接口,它是处理文件上传的核心组件。同时,我们还将介绍如何结合JQuery的uploader插件来实现一个用户友好的前端文件上传功能。 Spring `MultipartFile` 是...
public String testFileUpload(HttpServletRequest request, MultipartFile upload) throws IOException { // ... String path = request.getSession().getServletContext().getRealPath("/uploads/"); // ... ...
public String testFileUpload(MultipartFile upload) throws IOException { // 获取上传文件的名称 String filename = upload.getOriginalFilename(); // 把文件的名称设置唯一值,uuid String uuid = UUID....
public String fileupload(HttpServletRequest request, MultipartFile upload) throws Exception { System.out.println("文件上传"); //定义上传文件服务器路径 String path = ...
public String upload(@RequestParam(value = "file", required = true) MultipartFile file) { System.out.println(file.getContentType()); System.out.println(file.getName()); System.out.println(file....
`upload`通常指的是文件上传的过程,这里我们讨论的是使用Java实现多文件上传。本文将深入探讨如何利用Java来处理这一需求,并提供相关知识点。 一、MultipartFile接口 在Java中,Spring框架提供了`MultipartFile`...
不过,随着技术的发展,现在更多的人选择使用Spring Boot等现代框架,它们内置了更强大、更安全的文件上传机制,如`MultipartFile`。但在没有这些框架的情况下,`jsmartcom.jar`是一个不错的选择。
public String upload(@RequestParam("file") MultipartFile file) { // 上传文件的处理逻辑 return "uploadSuccess"; // 返回上传成功的页面 } ``` 这样,Controller 层就正确地返回了数据了。 总结 本文介绍了...
xhr.upload.onloadstart = function() { // ... }; ``` `progressFunction`方法计算已上传的百分比并更新进度条: ```javascript function progressFunction(evt) { if (evt.lengthComputable) { var ...
本示例"upload_picture_test.rar"提供了一个实现这一功能的Demo,让我们详细探讨一下其中的关键知识点。 首先,Spring Boot的`MultipartFile`接口是处理文件上传的核心。当用户通过表单提交包含文件的请求时,...