`
TimerBin
  • 浏览: 360562 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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));
  
   ......
}

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 tonyyan 2016-02-15  
感谢分享。

相关推荐

    上传文件加密的小实例

    在IT行业中,文件的安全传输和存储是至关重要的。在这个小实例中,我们关注的是如何对上传的文件进行加密处理,确保其在传输过程中的安全。本文将深入探讨这个主题,详细解释加密和压缩的原理,以及如何实现这两个...

    【我要发布】笔记1

    public R addPost(@RequestPart("post") Post post, @RequestParam("upload") MultipartFile upload) throws IOException { // 图片处理代码... // 插入启示到数据库 int num = postService.insert(post); if ...

    Springmvc上传文件.docx

    public String fileUpload(HttpServletRequest request, MultipartFile upload) throws Exception { // 获取上传文件的路径 String path = request.getSession().getServletContext().getRealPath("/upload/"); ...

    File 转 MultipartFile 和MultipartFile的maven配置

    @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // 存储文件到服务器或其他操作 } ...

    struts2+extjs中File的upload&download;&delete;例子及说明

    private MultipartFile upload; public String query() { // 查询附件列表逻辑 return "query"; } public String save() { // 上传并保存附件到数据库 return "save"; } public String delete() { ...

    多文件上传MultipartFile

    `webupload`可能是`webuploader`的实例或配置文件,用于配置上传行为,如上传URL、文件类型限制、并发上传的数量等。 总结来说,`MultipartFile`是Spring框架处理多文件上传的核心工具,结合前端的文件选择和`...

    java POI 通过MultipartFile删除Excel文件解析写入数据库

    @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 这里可以对file进行处理 } ``` 接下来,使用Apache POI库解析Excel文件。POI提供了HSSFWorkbook(用于...

    MultipartFile上传图片(多图片上传)

    @PostMapping("/upload") public String handleFileUpload(@RequestParam("images") MultipartFile[] files) { // 处理文件上传的逻辑 } ``` 接下来,我们需要对每张图片进行验证,检查文件是否为空、大小是否超过...

    Android上传单文件和多文件(后台使用MultipartFile)

    本知识点主要聚焦于如何在Android中实现单文件和多文件的上传,以及后台使用`MultipartFile`类进行处理的方式。`MultipartFile`是Spring框架中的一个接口,常用于处理HTTP请求中的多部分(multipart)数据,包括文件...

    详解SpringMVC使用MultipartFile实现文件的上传

    在SpringMVC中,`MultipartFile`接口是处理文件上传的核心组件。本文将深入探讨如何使用`MultipartFile`实现文件上传,以及如何结合FTP服务器进行跨服务器文件传输。 首先,要启用SpringMVC的文件上传功能,我们...

    Spring MultipartFile 文件上传【注解】& JQuery uploader plugin

    在本文中,我们将深入探讨Spring框架中的`MultipartFile`接口,它是处理文件上传的核心组件。同时,我们还将介绍如何结合JQuery的uploader插件来实现一个用户友好的前端文件上传功能。 Spring `MultipartFile` 是...

    SpringMVC文件上传原理及实现过程解析

    public String testFileUpload(HttpServletRequest request, MultipartFile upload) throws IOException { // ... String path = request.getSession().getServletContext().getRealPath("/uploads/"); // ... ...

    SpringMVC使用第三方组件实现文件上传

    public String testFileUpload(MultipartFile upload) throws IOException { // 获取上传文件的名称 String filename = upload.getOriginalFilename(); // 把文件的名称设置唯一值,uuid String uuid = UUID....

    springmvc实现跨服务器文件上传功能

    public String fileupload(HttpServletRequest request, MultipartFile upload) throws Exception { System.out.println("文件上传"); //定义上传文件服务器路径 String path = ...

    SpringMVC中MultipartFile上传获取图片的宽度和高度详解

    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实现多附件上传

    `upload`通常指的是文件上传的过程,这里我们讨论的是使用Java实现多文件上传。本文将深入探讨如何利用Java来处理这一需求,并提供相关知识点。 一、MultipartFile接口 在Java中,Spring框架提供了`MultipartFile`...

    java上传文件(upload)

    不过,随着技术的发展,现在更多的人选择使用Spring Boot等现代框架,它们内置了更强大、更安全的文件上传机制,如`MultipartFile`。但在没有这些框架的情况下,`jsmartcom.jar`是一个不错的选择。

    解决springboot MultipartFile文件上传遇到的问题

    public String upload(@RequestParam("file") MultipartFile file) { // 上传文件的处理逻辑 return "uploadSuccess"; // 返回上传成功的页面 } ``` 这样,Controller 层就正确地返回了数据了。 总结 本文介绍了...

    js实现文件上传功能 后台使用MultipartFile

    xhr.upload.onloadstart = function() { // ... }; ``` `progressFunction`方法计算已上传的百分比并更新进度条: ```javascript function progressFunction(evt) { if (evt.lengthComputable) { var ...

    upload_picture_test.rar

    本示例"upload_picture_test.rar"提供了一个实现这一功能的Demo,让我们详细探讨一下其中的关键知识点。 首先,Spring Boot的`MultipartFile`接口是处理文件上传的核心。当用户通过表单提交包含文件的请求时,...

Global site tag (gtag.js) - Google Analytics