java - Spring MVC 上传文件到Tomcat家目录

标签 java spring-mvc tomcat

Spring MVC 每次上传都会在 tomcat 的主目录中上传文件,但不会被删除。

有两个问题,

  1. Tomcat 进程对 PROD 中的 tomcat 主目录没有写权限。所以会得到权限被拒绝的错误
  2. 如果我们授予权限,那么将创建大量文件但永远不会删除。

有什么方法可以将文件作为 byte[] 从 JSP 上传到 Spring MVC Controller

最佳答案

一种解决方案是扩展 AbstractAnnotationConfigDispatcherServletInitializer覆盖其继承的 customizeRegistration()方法。

MultipartConfigElement 的对象可以提供类以配置与多部分相关的行为:

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    . . .

    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setMultipartConfig(
                new MultipartConfigElement(LOCATION, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD)
            );
    }

    private static final String LOCATION = "C:/temp/"; // Temporary location where files will be stored
    private static final long MAX_FILE_SIZE = 1024 * 1024 * 5; // 5MB : Max file size.
                                                               // Beyond that size spring will throw exception.
    private static final long MAX_REQUEST_SIZE = 1024 * 1024 * 20; // 20MB : Total request size containing Multi part.
    private static final int FILE_SIZE_THRESHOLD = 0; // Size threshold after which files will be written to disk

}

参见:Spring MVC 4 File Upload Example using Servlet 3 MultiPartConfigElement

关于java - Spring MVC 上传文件到Tomcat家目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259515/

相关文章:

spring - 限制注解@Notnull和@Size在Spring Bean中不能生效

eclipse - HTTP 状态 500 - 无法使用 Date 方法在 Eclipse 中为 JSP 编译类

hibernate - Tomcat、Hibernate、JPA 和法拉盛

multithreading - 经典与响应式(Reactive)方法中的连接、请求和线程

Java 8 lambda : Comparator

java - 如何在计算中使用增量?

java - 尝试传输文件时套接字关闭异常

java - 缩小类型转换 : Why is assignment of int to a byte in a declaration allowed?

java - 从tiles viewPreparer获取对象列表

java - 拦截 Controller 请求的问题