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

Java Apache HttpClient上载文件时出错

赫连照
2023-03-14

我想使用HttpClient4.3.1上传一个文件。我需要添加一个inputstream来控制上传进度。)而不是文件对象。这是我的代码:

        byte[] dump = ...;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(SENDLOG_URL);      

        MultipartEntityBuilder meb = MultipartEntityBuilder.create();
        meb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        // THIS WORKS!!  meb.addBinaryBody("log", new File("C:\\temp.zip"), ContentType.APPLICATION_OCTET_STREAM,"log.zip");
        InputStream is=new FileInputStream("C:\\temp.zip")
        meb.addBinaryBody("log", is, ContentType.DEFAULT_BINARY, "log.zip");            
        httppost.setEntity(meb.build());
        HttpResponse resp=httpclient.execute(httppost);
        is.close();

使用MultiPartEntityBuilder.addBinaryBody(Strin,File)方法可以工作,但使用MultiPartEntityBuilder.addBinaryBody(Strin,InputStream)方法则不起作用。

为什么new File()和new FileInputStream()之间会出现这种奇怪的行为?

共有1个答案

杨景山
2023-03-14

这一切都很简单。在前一种情况下,可以计算多部分实体内容的总长度,只要它的所有部分的长度都是已知的。这样的实体可以包含在由content-length标头分隔的请求中。在后一种情况下,不能确定总实体长度,并且使用块编码发送请求。显然,一些协议遵从性有限的服务器端脚本无法处理没有content-length标头的请求。

 类似资料:
  • 我有同样的问题输入流。你能分享更多关于你的修复的细节吗? 谢谢,哈莎 链接到您的问题 JavaApache HttpClient上传文件出错

  • 如果我正在使用,我在android 10上不会在较低版本上收到以下错误:DownloadDir=cordova.file.externalRootDirectory“下载/”; E/FileTransfer(5726):{"code": 1,"source":"https://example.azurewebsites.net/api/interactivelabel/export?ItemCod

  • 文件上载返回“状态代码8-无效参数”响应。想知道是什么导致了这种情况。 我使用Chilkat sFTP在多个合作伙伴之间传输和接收文件,没有问题,但是对于一个新的合作伙伴,我看到以下错误。合作伙伴的技术团队正在询问是否正在调用被动连接,但我在Chilkat中看不到任何可以让我改变这一点的属性。 日志消息:

  • 我正在尝试使用Maven编写一个JavaFx8应用程序。我编写了一个简单的应用程序主类和一个fxml文件(一个不执行任何操作的根fxml文件)。 当我尝试加载fxml根文件时,出现错误“Location is not set”: 我不是JavaFx8的新手,我已经遇到过这种错误,但这次我没有发现问题。 我的类是:app.java rootLayout.fxml: 我检查了打印出getClass输出

  • 尝试将文件上载到S3 Bucket,我使用以下代码设置SDK: 错误日志 可能的错误: URL应基于以下表单:文档

  • 问题:我正在按照本指南通过Spring MVC上传文件:https://Spring.io/guides/gs/uploading-files/。但是,当我这样做时,当我通过.jsp页面上的表单上传一个文件时,我总是会收到以下错误: HTTP状态400-所需的字符串参数“name”不存在 类型状态报告 message Required字符串参数“name”不存在 描述客户端发送的请求语法不正确。