我的目标是将一个zip文件上传到我的Angular 2前端,将其发送到我的Java(Spring Boot)后端并处理zip中包含的xml文件。
我正在使用JSZip将zip文件上传到我的Angular 2应用程序(但可以随意提出其他解决方案)。
问题是我不知道如何从前端发送zip文件,以及如何在后端接收它。
目前我正在发送JSZip对象,如下所示:
{
"files":{
"file1.xml":{
"name":"file1.xml",
"dir":false,
"date":"2017-05-17T11:43:24.000Z",
"comment":null,
"unixPermissions":33188,
"dosPermissions":null,
"_data":{
"compressedSize":1408,
"uncompressedSize":7120,
"crc32":-1714370258,
"compression":{
"magic":"\b\u0000"
},
"compressedContent":{
"0":165,
"1":89,
"2":93,
"3":147,
(...)
"1348":54
}
},
"_dataBinary":true,
"options":{
"compression":null,
"compressionOptions":null
}
},
"file2.xml":{
(...)
}
},
"comment":null,
"root":""
}
如何在Java中处理这些数据,以及如何处理xml文件?
我试过了:
@PostMapping(path = "zip")
public void importZip(@RequestBody final byte [] zipBytes) throws IOException {
final ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(zipBytes));
zipStream.getNextEntry();
ZipEntry entry;
while ((entry = zipStream.getNextEntry()) != null) {
System.out.println(entry.getName());
}
}
但entry
始终为null
,且不会显示任何内容。
我该怎么办?
非常感谢。
答案 0 :(得分:0)
我建议使用JSZip的generateAsync函数。这样,您可以将实际的二进制zip文件传输为Blob(与JSZip对象结构相对)。
// In javascript using JSZip version 3.x.x:
const jszipObject = new JSZip();
// Add the actual files
jszipObject.file('file1.xml', '<actual>file contents</actual>')
// 'blob' will yield a javascript Blob. You could alternatively use 'bytestring'.
// You can find all the options at the link above to the documentation
jszipObject.generateAsync({ type: 'blob' }).then(binaryData => {
const url = "http://some.url";
http.post(url, binaryData)
});