如何将InputStream张贴为Retrofit中的请求主体?
我正在尝试使用类似于以下内容的InputStream来执行POST:
@POST("/build")@Headers("Content-Type: application/tar")
Response build(@Query("t") String tag,
@Query("q") boolean quiet,
@Query("nocache") boolean nocache,
@Body TypedInput inputStream);
在这种情况下,InputStream来自压缩的tar文件。
张贴InputStream的正确方法是什么?
回答:
我在这里想到的唯一解决方案是使用TypeFile类:
TypedFile tarTypeFile = new TypedFile("application/tar", myFile);
和接口(这次没有显式设置Content-Type标头):
@POST("/build")Response build(@Query("t") String tag,
@Query("q") boolean quiet,
@Query("nocache") boolean nocache,
@Body TypedInput inputStream);
使用我自己的TypedInput实现会导致模糊的EOF异常,即使我提供了length()。
public class TarArchive implements TypedInput { private File file;
public TarArchive(File file) {
this.file = file;
}
public String mimeType() {
return "application/tar";
}
public long length() {
return this.file.length();
}
public InputStream in() throws IOException {
return new FileInputStream(this.file);
}
}
另外,在解决此问题时,我尝试使用最新的Apache Http客户端而不是OkHttp,这会导致“ Content-
Length标头已存在”错误,即使我没有明确设置该标头也是如此。
以上是 如何将InputStream张贴为Retrofit中的请求主体? 的全部内容, 来源链接: utcz.com/qa/415749.html