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

如何获得只是一个单一的表单字段从一个Http响应在Java并写入到一个文件?

徐星阑
2023-03-14

我正在调用一个客户端的下载服务,该服务发送回MIME数据,并试图保存一个zip文件。

该服务不仅返回文件本身,还返回其他几个MIME字段。所以当我使用entity.getContent()打开输入流时,我最终会将所有这些数据写入我的zip文件,而我只希望写入一部分“有效载荷”。我已经搜索过了,无论如何都看不到,只从内容中获得一个单独的部分。

代码如下:

HttpResponse response = services.getFileByPayloadID("12345-abcde");

BufferedInputStream bis = null;
try {
    bis = new BufferedInputStream(response.getEntity().getContent());
} catch (UnsupportedOperationException | IOException e) {
    e.printStackTrace();
}
String filePath = "c:\\sample.zip";
BufferedOutputStream bos = null;
try {
    bos = new BufferedOutputStream(new FileOutputStream(new File(filePath)));

    int inByte;

    while((inByte = bis.read()) != -1) {
        bos.write(inByte);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {bis.close();} catch (Exception e) {}
    try {bos.close();} catch (Exception e) {}
}

生成的文件的内容如下所示。请注意,我只希望将“Payload”的实际二进制内容写入该文件。任何指点或建议都将不胜感激!

----20170803116934内容处理:表单数据;name=“PayloadType”

X12_999_Response_005010X231A1----20170803116934内容处理:表单数据;name=“ProcessingMode”

批处理----20170803161934内容-处置:表单-数据;name="PayloadID"

12345-abcde----20170803161934内容处置:表单数据;name="TimeStamp"

2017-08-08T16:46:34Z----2017080311634内容处理:表单数据;name=“CORERuleVersion”

2.2.0----201708031161934内容配置:表单数据;name=“接收方”

99000061 ----20170803161934内容-处置:表单-数据;name="SenderID"

KYMEDICAID---201708031161934内容配置:表单数据;name=“ErrorCode”

成功----20170803116934内容配置:表单数据;name=“ErrorMessage”

----20170803116934内容处理:表单数据;name=“有效负载”

PKÁIKšÌ**

共有1个答案

汝才良
2023-03-14

解决方法是读取字节,解析为字符串=

HttpResponse response = services.getFileByPayloadID("12345-abcde");
ByteArrayOutputStream buf = new ByteArrayOutputStream();
BufferedInputStream bis = null;
try {
    bis = new BufferedInputStream(response.getEntity().getContent());
} catch (UnsupportedOperationException | IOException e) {
    e.printStackTrace();
}
String filePath = "c:\\sample.zip";
BufferedOutputStream bos = null;
try {
    bos = new BufferedOutputStream(new FileOutputStream(new File(filePath)));
    String output = "";
    int inByte;
    String charset = "your-charset"; //using charset to ensure that you can parse string correct to compare it.
    boolean start = false;
    while((inByte = bis.read()) != -1) {
        if (!start){
            buf.write((byte) inByte);
            output = buf.toString(charset);
            if (output.endsWith("name=\"Payload\"")){ //compare with your pattern to determine when will start write to file
                start = true;
            }
        }
        if(start){
            bos.write(inByte);
        }
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {bis.close();} catch (Exception e) {}
    try {bos.close();} catch (Exception e) {}
}
 类似资料:
  • 我有一个输入流,我想将其写入HttpServletResponse。有一种方法,由于使用字节[],需要花费的时间太长 我想知道在速度和效率方面,什么可能是最好的方法。

  • 我试图在我的应用程序中获取一些数据,并通过使用带有截击的HTTP POST请求向用户显示。我的问题是,我不知道如何获得服务器主体对请求的响应。在下面的代码中,响应总是“200”,这是HTTP状态代码。 如何提取身体反应并作为字符串进行管理?

  • 问题内容: 我一直在进行一些性能分析和基准测试,以优化向临时文件的写操作,以捕获来自的任何错误。 具体来说,我们正在写入缓冲区,检查是否有错误,如果没有,则写出到。但是,问题在于临时缓冲区的请求开销有些明显: 启用剖析时约为6.2k req / s-27.6k-> 21.4k,禁用时为29k-> 24k; 每个请求的延迟增加9毫秒(40毫秒-> 49毫秒)。 当然,21k req / s仍然是很多

  • 问题内容: 在一个文本文件中,我有150个字。我还有另一个文本文件,大约有100,000行。 如何检查属于第一个文件的每个单词是否在第二个文件中? 我曾考虑过使用,但找不到如何使用它来阅读原始文本中的每个单词。 有没有办法做到这一点?还是其他解决方案? 我尝试使用此shell脚本,但它几乎匹配每一行: 我发现的另一种方法是: 问题答案: 您可以使用: 否则匹配完整的单词: 更新: 根据评论:

  • 问题内容: 我有一个带有汉字文本的文件,我想将这些文本复制到另一个文件中。但是文件输出混乱了中文字符。注意,在我的代码中,我已经在使用“ UTF8”作为编码了: 问题答案: 在这种情况下,请勿使用FileReader,因为它不允许您指定输入编码。在FileInputStream上构造一个InputStreamReader。 像这样: