当前位置: 首页 > 面试题库 >

如何将InputStream张贴为Retrofit中的请求主体?

米修平
2023-03-14
问题内容

我正在尝试使用类似于以下内容的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标头已存在”错误,即使我没有明确设置该标头也是如此。



 类似资料:
  • 问题内容: 我对使用Apach JMeter有疑问。 我们的项目Android应用将具有“ Gzip压缩”功能的json数据发布到API服务器。使用“ Apache HttpClient”及其“ GzipCompressingEntity”类的Android应用。 为了对API服务器进行性能测试,我尝试通过JMeter的代理(=“ HTTP(S)Test Script Recorder”)记录请求

  • 我正在使用SoundCloud api创建一个应用程序,并尝试附加用户输入的字符串值,但它在界面中显示为null,我如何在url中附加该值? MainActivity.java SCService.java 搜索的字符串在我的SoundCloud.java类 我想在GET参数中附加那个SCURL字符串,但它显示了SCURL的null值,我如何实现这一点? 更新:我如上所述更改了代码,但出现了此错误

  • 如果我没有使用lambda函数,这看起来就像普通的嵌套调用一样难看。这样做更好吗?

  • 问题内容: 我有将ZipInputSream转换为byte []的代码,但我不知道如何将其转换为inputstream。 问题答案: 这是我解决此问题的方法。现在,我可以将单个文件从ZipInputStream作为InputStream传输到内存。

  • 问题内容: 我正处于开发阶段,在那里我有两个模块,从一个模块我得到的输出为a OutputStream,第二个模块仅接受InputStream。您是否知道如何转换OutputStream为InputStream可以连接这两部分的方式(反之亦然,我是说真的) 谢谢 问题答案: 是您向其中写入数据的地方。如果某个模块公开了,则期望在另一端读取一些内容。 另一方面,暴露出的信息表示您需要侦听此流,并且会

  • 问题内容: 我正在研究一个Java Web应用程序,其中文件将存储在数据库中。最初,我们只需调用结果集即可检索数据库中已有的文件: 然后使用显而易见的构造函数将此字节数组转换为: 直到我们开始尝试存储和检索更大的文件之前,这一直很好。将整个文件内容转储到字节数组中,然后再从中构建出来,仅需要太多内存。 我的直接想法是使用来检索数据库中的数据流,并以某种内存有效的方式将其转换为数据流。不幸的是,似乎