Мне нужно разрешить пользователю загружать сжатые папки с сервера .Однако мне удалось выполнить сжатие, даже если я попытаюсь прочитать файл tar и отправить его на клиентскую сторону, поскольку файл для загрузки поврежден или сохраняет только один файл из папки (например, 1/7).
IЯ пытался отправить файлы json, и тот же код работал, но для больших файлов и файлов tar он не отправляет весь файл.Я попытался просто отправить файл tar из серверной части на клиентскую сторону для загрузки, но он также не работает.
/* back controller. */
const getDataDownload = function(req,res) {
if (req.params && req.params.dataId){
DataModel
.findById(req.params.dataId)
.exec((err,data) => {
if(data){
var file = '../data/filename.tar';
var stat = fs.statSync(file);
res.writeHead(200, {
'Content-Type' : 'application/tar',
'Content-Length' : stat.size
});
var tempTarFile = fs.createReadStream(file);
tempTarFile.pipe(res);
}})}
else {
res
.status(404)
.json({"message":"No Id in request"});
}
}
/* front controller. */
public dataDownload(dataId: string){
const url: string = `${this.apiBaseUrl}/dataDownload/${dataId}/`;
const req = new HttpRequest('GET', url, {
headers: new HttpHeaders({'Authorization': token}),
responseType: 'text' as 'text',
reportProgress: true});
this.http.request(req).subscribe((event: HttpEvent<any>)=>{
switch (event.type) {
case HttpEventType.Response:
const filename = 'filename.tar'
var blob = new Blob([event.body], { type: "application/tar" });
saveAs(blob, 'filename.tar')
break;
case HttpEventType.DownloadProgress:
console.log(' (',Math.round(event.loaded/event.total),')');
break;
}}
)
}
Файл не открывается должным образом и не имеет правильного размера,Пожалуйста, помогите