当前位置: 首页 > 知识库问答 >
问题:

所需长度411:使用apache(4.3)HttpPost和MultipartEntityBuilder上传文件。

曹鹏海
2023-03-14

我正在使用HttpClient 4.3。3.我的任务是将文件上传到服务器上。以下是我的代码:

    InputStream inputStream = new FileInputStream(new File("/path/to/file"));
    byte[] data;
    data = IOUtils.toByteArray(inputStream);
    InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data),"file-name-on-ser");

    MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();   

    multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

    multipartEntity.addPart("file",inputStreamBody);

    HttpPost httpPost = new HttpPost("file upload URL");

    httpPost.setEntity(multipartEntity.build());

    CloseableHttpResponse response  = httpclient.execute(httpPost); 

    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

      String line = "";

      while ((line = rd.readLine()) != null) 
      {
        System.out.println(line);
      }

当我运行此代码时,它成功地连接到服务器。但响应的输出是

         <html>
         <head><title>411 Length Required</title></head>
         <body bgcolor="white">
         <center><h1>411 Length Required</h1></center>
         <hr><center>server-name</center>
         </body>
         </html>

当我使用firebug进行调试时,我看到以下请求头。

响应头视图源

缓存控制无存储,无缓存

连接保持活力

日期2014年5月22日星期四08:58:02 GMT

保持活动超时=30

服务器*****

设置Cookie****路径=/

转移编码分块

请求Headersview源

接受text/html、application/xhtml、application/xml;q=0.9,/;q=0.8

接受编码gzip,放气

接受语言en-US, en; q=0.5

连接保持活力

饼干****

主人*****

参考https://**/shareupload/

用户代理Mozilla/5.0(Windows NT 6.1; rv: 29.0)Gecko/20100101 Firefox/29.0

从上传流请求报头

内容-长度12642

内容类型多部分/表单数据;边界=------------------------------------105143784893

我在堆栈溢出方面也看到过类似的问题。

1)411内容-所需长度

2)文件上传使用apache的http客户端库不工作

但我仍然无法找到解决问题的办法。是否需要在请求标头中设置内容长度和内容类型参数?

先谢谢你。

共有1个答案

王翰墨
2023-03-14

试试看:

    InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data),"file-name-on-ser"){
            @Override
            public long getContentLength(){return data.length();}
    };
 类似资料:
  • 我试图使用Android Apache HttpClient做一个POST,但它返回错误411内容长度必需。这是代码。 我已经尝试添加行:- 但我得到了一个“组织”。阿帕奇。http。ProtocolException:内容长度标头已出现“错误”。这必须意味着HttpClient已经在发送内容长度。不幸的是,我无法访问服务器端。知道为什么会返回这些错误吗?

  • 问题内容: 我尝试将数据上传到服务器,我的数据包含多张图片和大图片,在此之前,我尝试使用将图片转换为字符串,并使用之前发送过的其他数据和图片,但是我在这里遇到问题,因此,我阅读了其中一种必须尝试使用​​的解决方案。我仍然感到困惑,不知道如何使用它,有没有人可以帮助我使用该方法呢?这是我的代码: 有没有人可以帮助我教导和告诉我如何使用MultiPartEntityBuilder发送JSON和图像?

  • 问题内容: 我正在使用此代码上传文件(图像到文件夹) 当文件(图像)保存在指定路径时…如果我想用某个所需的名称保存文件…。 我曾尝试更换此 有了这个 但是它不起作用 问题答案: 你可以试试看

  • 今天我想把我的一个项目从我的开发环境转移到我的生产环境。 当我试图通过FTP上传它时,我已经看到几乎110k文件正在更新。 有人能告诉我这是否真的是必需的,或者我是否错过了一些编译功能等来启动和运行它吗? 干杯,费边

  • 我有一个HTML表单,里面有一个文件上传。我正试图使用通过表单上传Word文档,但它不起作用。 表单有几个文本输入和2个文件上传行。如果我使用方法并将这些字段设置为空Strings,则文本字段将正确提交。因为我需要上传文件,所以我改成了,甚至不能让基本的测试再次工作。 工作守则 正在尝试MultipartEntityBuilder 该表单由Oracle托管并返回错误: 发生意外错误:ORA-065

  • 问题内容: 看来我还没有清楚地传达出我的问题。我需要发送一个文件(使用AJAX),并且需要使用Nginx HttpUploadProgressModule 获取文件的上传进度。我需要一个很好的解决方案。我已经尝试过使用jquery.uploadprogress插件,但是我发现自己不得不重写其中的大部分内容,以使其在所有浏览器中都能正常工作并使用AJAX发送文件。 我所需要的只是执行此操作的代码,它