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

从超文本传输协议管理zip获得响应

穆高澹
2023-03-14

我有这个问题:

我需要从服务器下载一个zip文件,这个zip包含。xod和。巴布亚新几内亚。我正在使用AngularJS,JavaSpring,来克服跨域问题,我的htt。获取java spring控制器的角度调用,它将进行真正的get调用。我必须下载zip-

这是我的角度代码:

var req = {
             method: 'GET',
             url: CONTEXT_PATH+"/services/data/"+meetingId,
             headers: {
               'Content-Type': undefined
             }
    }

    $http(req).then(function(data){
        console.log("rest call done!");
        console.log(data);
    });

这是java spring代码:

@RequestMapping(value="/data/{meetingId}", method = RequestMethod.GET)
public Buffer getMeeting(@PathVariable(value="meetingId") String meetingId) {
    byte[] file = new byte[2048];
    Buffer buf =null;
    try {

        String url = getContentServer()+"/data?username="+getUsername()+"&password="+getPassword()+"&id="+meetingId;

        logger.info("start Rest template");
        RestTemplate templ = new RestTemplate();
        file = templ.getForObject(url, byte[].class);
        logger.info("PRE BUF");
        buf = ByteBuffer.wrap(file);
        logger.info("POST BUF");

    } catch (Exception e) {
        String msg = "Error retrieving meeting list";
        logger.error(msg, e);
    }
    logger.info("file zip  --> "+file.length);
    logger.info("buf --> "+buf+" -- buf.array --> "+ buf.array());
    return buf;
}

这是控制台。日志

Object{data:"UEsDBBQACAAIAA5IpkgAAAAAAAAAAAAAAMTYwMzQucG...AcqwpAGxvZ28ucG5nUEsFBgAAAAAIAAgAuwEAAMa/KQAAAA==",状态: 200,配置: Object, statusText:"OK"}

我不知道我可以解码这个缓冲区,并在它的客户端提取文件。

谢谢。

共有1个答案

白泽语
2023-03-14

我稍微搜索了一下,试图找到解决办法。我的疑问是:您保存在dataBase中的数据是blob类型的,或者如果您只保存文件的路径就可以了?

因为我认为在服务器端这样做更好。我喜欢在服务器端工作,而在客户端工作就越少。因此,在搜索控制zip文件的java类时,我发现:https://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipFile.html

我在服务器端编写了以下代码(未进行测试,因此可能需要稍加修改):

Enumeration<E> listEntries = zip.entries()

  for (listEntries; listEntries.hasMoreElements();) {
    ZipEntry item = getEntry(listEntries.nextElement().toString())
    InputStream fileStream = getInputStream(item)
  }

使用该InputStream,您可以返回未压缩文件的名称列表或hashmap、arraylist或流列表和/或其文件名或任何您需要的内容。

List<String> fileNames 

HashMap<String, Object> filesStreams 

例如。

只是我不太熟悉Spring。它是可以返回一个列表还是你必须返回一个缓冲区?如果你必须返回缓冲区,告诉我,我会找到另一个解决方案。;)

 类似资料:
  • 我只是有一个关于服务中http请求的结构和处理响应的问题。我正在使用Angular2。alpha46 Typescript(刚刚开始测试-我喜欢它…Ps…。感谢所有一直致力于它并通过github作出贡献的人) 因此,采取以下措施: 登录表单。组成部分ts 从这个组件中,我导入了我的userService,它将容纳我的超文本传输协议请求,以登录用户。 使用者服务ts 我想做的是能够处理http请求之

  • 我的LogCat: 签名密钥(sw)为https://api.dropbox.com/1/shares/dropbox/a.jpg?oauth_consumer_key=2f2y1dyuqhp58ek 我对http没有太多经验。。 因为httpPost=新的httpPost(sw);工作正常,这是否意味着基本字符串签名正确? 还是我错过了什么?

  • 我想知道你对这个概念的看法/意见。如果有替代方案?这是否可行/有益? 据我所知,对于每个http请求,服务器都会执行一些操作并返回http响应。 现在考虑任何场景,我们希望对服务器上运行的进程有更多的控制。 情景1:http请求发送- 在这里,资源被浪费了。 情况2:http请求发送- 在这里,客户端不知道服务器中运行的进程的状态。客户端必须等待,直到它获得超文本传输协议响应。 我的想法是:在初始

  • 调用SOAX Web服务,并使用groovy脚本检查Web服务响应的超文本传输协议状态。在《骡子3》中,精彩的剧本是... 骡子4中的等价物是什么?谢谢。

  • 我正在使用下面的代码登录apiendpoint并从中检索数据,但响应似乎已编码,我无法读取内容。我正在使用request-requestes-0.0.1 当我在控制台上打印相同的响应 有人能告诉我如何解码和读取响应中的数据吗

  • 我用Ktor构建了一个Web服务器,并想缓存API方法结果。但是我不知道如何从下面call.response.代码中获取响应正文 如果我无法获得响应体,还有其他解决方案可以在Ktor中缓存API方法的结果吗?