Я работаю над ASP. net ядром Web API на стороне сервера и Angular 8 на стороне клиента.
Мне нужно сжать список файлов, отправить их на сервер и распаковать в сервер. Я использую JSZip на стороне клиента для сжатия, и мой код на стороне клиента:
zipAndAddFileToUploader2(file: File): void {
const fileName = file.name
var url = URL.createObjectURL(file)
let self = this;
JSZipUtils.getBinaryContent(url, function (err, data) {
if(err) {
throw err;
}
var zip = new JSZip();
zip.file(fileName, data);
zip.generateAsync({type:'blob', compression: 'DEFLATE', compressionOptions: { level: 9 }})
.then(function(content) {
var file_object = new File([content], fileName, {type: 'application/zip'});
self.uploader.addToQueue([file_object]);
});
});
}
Моя сторона сервера выглядит следующим образом:
static byte[] Decompress(byte[] data)
{
byte[] byteArray = null;
using (var compressedStream = new MemoryStream(data))
using (MemoryStream decompressedFileStream = new MemoryStream(data))
{
using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
{
decompressedFileStream.Position = 0;
decompressionStream.CopyTo(decompressedFileStream);//Exception ****
byteArray = decompressedFileStream.ToArray();
}
}
return byteArray;
}
CopyTo (decompressedFileStream) выдает следующее исключение:
Исключение: архивная запись была сжата с использованием неподдерживаемого метода сжатия.
Сведения об исключении:
at System.IO.Compression.Inflater.Inflate(FlushCode flushCode)
at System.IO.Compression.Inflater.ReadInflateOutput(Byte* bufPtr, Int32 length, FlushCode flushCode, Int32& bytesRead)
at System.IO.Compression.Inflater.ReadOutput(Byte* bufPtr, Int32 length, Int32& bytesRead)
at System.IO.Compression.Inflater.InflateVerified(Byte* bufPtr, Int32 length)
at System.IO.Compression.DeflateStream.CopyToStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.MemoryStream.CopyTo(Stream destination, Int32 bufferSize)
at System.IO.Compression.DeflateStream.CopyToStream.CopyFromSourceToDestination()
at System.IO.Compression.DeflateStream.CopyTo(Stream destination, Int32 bufferSize)
at System.IO.Compression.GZipStream.CopyTo(Stream destination, Int32 bufferSize)
at System.IO.Stream.CopyTo(Stream destination)
at MyApp.MyService.Decompress(Byte[] data) in C:\...\MyService.cs:line 125
at MyApp.MyService.<UpdateMyFile>d__24.MoveNext() in C:\...\MyService.cs:line 137
Любая помощь?