【问题标题】:Spring MVC uploads file to Tomcat home directorySpring MVC 将文件上传到 Tomcat 主目录
【发布时间】:2016-12-21 09:39:01
【问题描述】:

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

有两个问题,

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

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

【问题讨论】:

  • 我们设置了-Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp。但是文件不会进入这个目录,但仍然会进入 /var/lib/tomcat7 这是tomcat的主目录
  • 可能$CATALINA_TMPDIR 没有绑定到java.io.tmpdir?该链接应适用于本案例
  • 为什么要上传到 tomcat 主目录,将其放在主目录中的某个文件夹或实例中的 d 路径中...

标签: java spring-mvc tomcat


【解决方案1】:

一种解决方案是扩展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

【讨论】:

    【解决方案2】:

    最好有一个单独的外部文件夹用于文件上传,并将 Tomcat 中的该文件夹映射为一个位置。

    <Context path="/uploads" docBase="C:/uploads/" />

    它可以从以下位置访问:

    localhost:8080/uploads

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2022-11-07
      • 2019-10-17
      • 1970-01-01
      • 2017-10-30
      • 2016-05-26
      • 1970-01-01
      相关资源
      最近更新 更多