我有这个问题:
我需要从服务器下载一个zip文件,此zip包含.xod和.png。 我正在使用Angular js,java spring来克服跨域问题,我的htt.get angular调用java spring控制器并且它进行真正的get调用。 我必须下载zip - >将此zip文件返回到angular,解压缩,解压缩文件并将其保存在IndexedDB中。
这是我的角度代码:
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;
}
这是console.log:
对象{data:“UEsDBBQACAAIAA5IpkgAAAAAAAAAAAAAAAAJAAAAMTYwMzQucG ... AcqwpAGxvZ28ucG5nUEsFBgAAAAAIAAgAuwEAAMa / KQAAAA ==”,状态:200,配置:对象,statusText:“确定”}
我不知道我可以解码这个缓冲区并在客户端提取文件。
感谢。
答案 0 :(得分:0)
我搜索了一下,试图找到解决方案。我的疑问是:你在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或仅列出的流和/或其fileName或您需要的任何内容。
List<String> fileNames
或
HashMap<String, Object> filesStreams
例如,。
我对春天不太熟悉。返回List是否可行,或者你必须返回一个Buffer?如果你必须返回缓冲区告诉我,我会找到另一种解决方案。 ;)