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

Java Apache HttpClient使用InputStream上载文件时出错

百里泓
2023-03-14

我有同样的问题输入流。你能分享更多关于你的修复的细节吗?

谢谢,哈莎

链接到您的问题

JavaApache HttpClient上传文件出错

共有3个答案

齐承运
2023-03-14

另一个选项是org。阿帕奇。http。实体哑剧表演所容纳之物ByteArrayBody,如果事先不知道大小(!!!您必须确保inputStream的内容将适合JVM的内存):

InputStream inputStream = // get your input stream somehow
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int i;
    byte buff[] = new byte[4096];
    while( -1 != (i = inputStream.read(buff))){
        baos.write(buff, 0, i);
    }
    ByteArrayBody bab = new ByteArrayBody(baos.toByteArray(), "fileName1");
澹台正真
2023-03-14

扩展的组织的代码。阿帕奇。http。实体哑剧表演所容纳之物InputStreamBody将类似于此。在创建InputStreamBodyExtended

public class InputStreamBodyExtended extends InputStreamBody {

  private long contentLength = -1; 

  public InputStreamBodyExtended(InputStream in, String filename, long contentLength) {
    super(in, filename);
    this.contentLength = contentLength;
  }

  public InputStreamBodyExtended(InputStream in, ContentType contentType, long contentLength) {
    super(in, contentType);
    this.contentLength = contentLength;
  }

  public InputStreamBodyExtended(InputStream in, ContentType contentType,
        String filename, long contentLength) {
    super(in, contentType, filename);
    this.contentLength = contentLength;
  }

  @Override
  public long getContentLength() {
    return contentLength;
  }

}

季俭
2023-03-14

还有另一种简单的方法可以覆盖InputStreamBody。getContentLength无需创建我们自己的ContentBody实现,如果您知道您的contentLength-

InputStreamBody inputStreamBody = new InputStreamBody(inputStream, ContentType.APPLICATION_OCTET_STREAM, fileName){
                @Override
                public long getContentLength(){return contentLength;}
            };

MultipartEntityBuilder.create()
            .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
            .addPart("dataAsStream", inputStreamBody)
            .build();
 类似资料:
  • 问题内容: 我们正在使用Amazon AWS Java库上载文件,并且很难获得上载进度。我们目前正在致电以下内容: 我们如何设置回调以检查文件上传进度? 谢谢 问题答案: 我遇到了这个确切的问题,并编写了一个简单的InputStream包装器,该包装器输出了不错的进度条: (这是从实时代码中复制粘贴的,因此您可能必须做一些修补才能使其在您自己的代码中起作用。) 然后,只需使用InputStream

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

  • 在我的主要活动中: 编辑:我在主线程上运行了网络代码,它引发了一个异常。现在为下载创建一个新的线程,它将获得示例PDF(http://www.pdf995.com/samples/PDF.PDF),并将其内容放入文件中。感谢@GreenApps!

  • 我想使用HttpClient4.3.1上传一个文件。我需要添加一个inputstream来控制上传进度。)而不是文件对象。这是我的代码: 使用MultiPartEntityBuilder.addBinaryBody(Strin,File)方法可以工作,但使用MultiPartEntityBuilder.addBinaryBody(Strin,InputStream)方法则不起作用。 为什么new

  • 我正在使用Apache Commons Net FTP库进行FTP客户端项目。我已成功登录,但当我尝试从FTP服务器下载文件时,得到了空文件或null。 我尝试设置文件传输模式或文件类型,但都不起作用。 下面是我启动客户端的代码示例: 这是检索文件的代码: 我还尝试添加了一些其他属性,如: 但都不管用。 这可能与服务器配置有关吗?实际上我没有对FTP服务器的配置访问权限。提供商只给了我对它的读取权

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个