如何从泽西响应中保存文件?

 浪子烦恼猪_309 发布于 2023-02-13 13:10

我试图从Web资源使用Jersey下载SWF文件.

我写了以下代码,但无法正确保存文件:

Response response = webResource.request(MediaType.APPLICATION_OCTET_STREAM)
  .cookie(cookie)
  .post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));

String binarySWF = response.readEntity(String.class);                                     
byte[] SWFByteArray = binarySWF.getBytes();       

FileOutputStream fos = new FileOutputStream(new File("myfile.swf"));
fos.write(SWFByteArray);
fos.flush();
fos.close();

保存假设响应确实返回SWF文件,作为response.getMediaType返回application/x-shockwave-flash.

但是,当我尝试打开SWF时,没有任何事情发生(也没有错误),这表明我的文件不是从响应中创建的.

2 个回答
  • 从Java 7开始,您还可以使用新的NIO API将输入流写入文件:

    InputStream is = response.readEntity(InputStream.class)
    Files.copy(is, Paths.get(...));
    

    2023-02-13 13:12 回答
  • 我终于得到了它的工作.

    我想出了我可以直接getEntity用来检索它的InputStream 的Jersey API response(假设它还没有被读过).

    使用getEntity检索InputStreamIOUtils#toByteArray其创建从一个字节数组InputStream,我设法得到它的工作:

    Response response = webResource.request(MediaType.APPLICATION_OCTET_STREAM)
      .cookie(cookie)
      .post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));                                                  
    
    InputStream input = (InputStream)response.getEntity();
    
    byte[] SWFByteArray = IOUtils.toByteArray(input);  
    
    FileOutputStream fos = new FileOutputStream(new File("myfile.swf"));
    fos.write(SWFByteArray);
    fos.flush();
    fos.close();
    

    请注意,IOUtils是一个常见的Apache函数.

    2023-02-13 13:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有