• springmvc中Tomcat跨服务器上传中文名文件报错解决方案


    今天花了一整天时间解决tomcat跨服务器上传文件失败的问题,经过各种搜索终于解决了,下面是解决具体方法:

    一、首先修改Tomcat的只读属性为false。

    在tomcat的conf目录下的web.xml文件中找到<servlet>标签,添加初始化参数readonly,代码如下:

        <servlet>
            <servlet-name>default</servlet-name>
            <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
            </init-param>
            <init-param>
                <param-name>readonly</param-name>
                <param-value>false</param-value>
            </init-param>
            <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

    二、将文件名进行URL编码:

    这个能够解决状态码为400的错误。注意:

    URLEncoder的导包语句为  import java.net.URLEncoder;不要导错了另一个包,我就不写错误包出来了以免误导。
    @Controller
    @RequestMapping("springmvc/user")
    public class UserController {
    
        /**
         * 跨服务器文件上传
         * @param upload
         * @return 跳转到success.jsp的页面
         * @throws Exception
         */
        @RequestMapping("/fileUpload3")
        public String fileUpload3(MultipartFile upload) throws Exception{
            System.out.println("跨服务器文件上传。。。。");
    
            //定义上传文件服务器的路径
            String path = "http://localhost:9090/uploads/";
    
    
            //说明文件上传项
            //获取上传文件的名称
            String filename = upload.getOriginalFilename();
            //URLEncoder的导包语句为  import java.net.URLEncoder;
            String encodeFileName = URLEncoder.encode(filename,"UTF-8");
            //这个输出语句为调试用
    //        System.out.println(encodeFileName);
    
            //防止文件重复
            String uuid = UUID.randomUUID().toString().replace("-","");
            filename = uuid + "-" + encodeFileName;
            //这个输出语句为调试用
    //        System.out.println(filename);
    
            //创建客户端对象
            Client client = Client.create();
            //和图片服务器进行连接
            WebResource webResource = client.resource(path+filename);
            //上传文件
            webResource.put(upload.getBytes());
    
    
            return "success";
        }
    }

    三、最后一步(如果有这个问题就解决,没有可忽略)

    如果还是报409的错误,你最好在tomcat的webapps目录下建立一个uploads目录,这个目录在你要上传文件的那个tomcat服务器的对应虚拟目录下建立,和你上面写的path那个对应。

    我的虚拟目录是 “/” ,所以就直接建立了一个uploads的目录就好了。如图

    这下子我的问题就都解决了,能够成功上传文件到另一个服务器了。

  • 相关阅读:
    高斯消元(模板及bitset优化异或方程)
    dsu on tree
    拉格朗日插值
    [CF] CF900D Unusual Sequences
    【模板】Polya 定理
    Min-25筛学习笔记
    [CF] CF156C Cipher
    基于 Flink + Kafka 的广告实时数据分析建设与实践
    开源中国【面经】Java后台开发
    spring boot中连接数据库报错500(mybatis)
  • 原文地址:https://www.cnblogs.com/xzhm/p/12543026.html
Copyright © 2020-2023  润新知