当前位置:  开发笔记 > 运维 > 正文

在HttpSession中存储MultipartFile

如何解决《在HttpSession中存储MultipartFile》经验,为你挑选了1个好方法。



1> ZeAL0T..:

经过一些调查后,我发现只有在Tomcat处理请求时,MultipartFile才存在于临时目录中.在响应后它删除文件.这就是尺寸为零的原因.可以使用自定义结构将此数据存储在内存或DB或其他位置.

这是一个例子:

public class UploadedFile {
    private final String originalFilename;
    private final byte[] data;

    public UploadedFile(String fileName, byte[] data) {
        this.originalFilename = fileName;
        this.data = data.clone();
    }

    public String getOriginalFilename() {
        return originalFilename;
    }

    public byte[] getData() {
        return data.clone();
    }

    public int getSize() {
        return data.length;
    }
}

在内存存储的情况下,可以使用MultipartFile类.如果文件没有存储在硬盘上,只要你有参考文件,它就存在于内存中.

以下是application.properties文件的示例:

multipart.file-size-threshold=10Mb
multipart.max-file-size=10Mb
multipart.max-request-size=10Mb

multipart.file-size-threshold强制所有上传的文件最多10MB存储在内存而不是HDD中.默认情况下,它等于0,所有文件都存储在HDD上.

我还发现使用HttpSession不是一个优雅的决定. @SessionAttributes注释与Model一起使这个解决方案相当清晰.

这是更新的控制器:

@Controller
@SessionAttributes(value = {"uploadedFiles"})
public class IndexController {
    @ModelAttribute("uploadedFiles")
    public List initUploadedFiles() {
        return new ArrayList<>();
    }

    @RequestMapping("/")
    public String index() {
        return "index";
    }

    @RequestMapping(value = "upload", method = RequestMethod.POST)
    public String index(Model model, @RequestParam MultipartFile[] files, @ModelAttribute("uploadedFiles") List uploadedFiles) {
        for (MultipartFile file : files) {
            try {
                uploadedFiles.add(new UploadedFile(file.getOriginalFilename(), file.getBytes()));
            } catch (IOException e) {
                throw new RuntimeException("Can't read file " + file.getOriginalFilename(), e);
            }
        }
        model.addAttribute("uploadedFiles", uploadedFiles);
        return "redirect:";
    }
}

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有