关于使用SpringMVC在使用com.sun.jersey进行跨服务器上传文件的各种报错的问题解决方案

4 篇文章 0 订阅
4 篇文章 0 订阅

在使用SpringMVC配合com.sun.jersey进行跨服务器上传文件时,遇到了各种各样的问题,百度了也尝试了N多种方法,最终才一个个的解决,真是心累啊。。。

案例的代码如下,格式或者规范各位大佬就不要介意了,这里主要是记录这次解决问题的历程而已,嘿嘿嘿

    @RequestMapping("/t3")
    public String test3(@RequestParam(value = "uploadFile") MultipartFile multipartFile)
            throws Exception {
        String filename = UUID.randomUUID() + "_" + multipartFile.getOriginalFilename();
        System.out.println("filename=" + filename);
        final String UPLOAD_FILE_HOST_URL = "http://localhost:9080/mvc11server/uploads/";
        //创建服务器客户端对象
        Client client = Client.create();
        //连接文件存储服务器
        WebResource webResource = client.resource(UPLOAD_FILE_HOST_URL + filename);
        //写入上传数据
        webResource.put(multipartFile.getBytes());
        return "main";
    }

下面开始列出遇到的各种问题以及对应的解决方案


错误一

HTTP Status 500 – Internal Server Error

Type 异常报告

消息 Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/sun/jersey/api/client/Client

解决方案

项目或module发布时缺少了com.sun.jersey的jar,因此发布时需要手动添加lib文件夹,并lib目录添加jar包,如下图所示:


错误二

HTTP Status 500 – Internal Server Error

Type 异常报告

消息 Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9080/mvc11server/uploads/609e519f-5ab6-4767-b0b1-709c774bab4e_barcode.txt returned a response status of 405 Method Not Allowed

解决方案

在tomcat默认安全的设置中,默认不支持PUT和DELETE请求的写入操作(个人理解),因此需要手动修改默认权限设置,步骤如下:

进入tomcat的安装目录(即:CATALINA_HOME),打开conf/web.xml文件,在<servlet></servlet>标签中添加readonly=false参数,如下所示(其它的参数是默认就有的,不是新增的):

    <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>listings</param-name>
            <param-value>false</param-value>
        </init-param>
		<init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

错误三(也是最坑爹一个错误)

HTTP Status 500 – Internal Server Error

Type 异常报告

消息 Request processing failed; nested exception is com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Software caused connection abort: recv failed

解决方案

这个错误是几个错误中最坑爹的,也是最无语的,我查了好久才发现这个错误的原因,原来tm的是默认不支持路径中包含中文的文件,因为文件接收服务器如果不设置编码格式,默认使用的是ISO-8859-1。

所以,要么改文件名不要含中文,或者再文件接受服务器上添加一个过滤器,设置request的统一编码格式。

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值