Tôi muốn tải xuống tệp với trình duyệt của mình từ máy chủ đang chạy với NodeJS. Về phía server, để phục vụ các tập tin tôi có:Tải xuống tệp từ máy chủ Node.JS với AngularJS
exports.download = function(req, res) {
var filename = "33.jpg";
var filePath = path.join(__dirname, '..', '..', 'downloads', filename);
var stat = fs.statSync(filePath);
var fileToSend = fs.readFileSync(filePath);
res.writeHead(200, {
'Content-Type': 'image/jpeg',
'Content-Length': stat.size,
'Content-Disposition': filename
});
res.end(fileToSend);
};
Các tập tin gọi là 33.jpg tồn tại và là 744KB cỡ. Các cuộc gọi từ khách hàng hoạt động tuyệt vời
Về phía khách hàng với AngularJS ở đây là làm thế nào tôi gọi một cuộc gọi bài để tải tệp (hiện tham số uri không được sử dụng):
$scope.downloadTrack = function(uri) {
$http.post('/api/files/download', {uri: uri}).then(function(response) {
var blob = new Blob([response.data], { type: 'image/jpeg' });
var fileName = response.headers('content-disposition');
saveAs(blob, fileName);
}, function(response) {
console.log('Download error');
console.log(response);
});
}
Các tiêu đề là ok (tôi có thể truy xuất tên tệp)
Vấn đề của tôi là tệp được tải xuống nhưng có kích thước 1,5Mb và không thể đọc được. Tôi đã thử các phương pháp khác nhau với luồng, nối dữ liệu vào phản hồi, đường ống, v.v. mà không thành công. điểm khác (không chắc chắn là quan trọng): trong vòng Safari các tập tin được mở ra với một biểu tượng bị hỏng hiển thị, trong Chrome file được lưu
PS: tôi đã tạo ra dự án với Yeoman nếu thông tin rất hữu ích
Cảm ơn tất cả
[cập nhật] phiên bản mới của chức năng máy chủ (vẫn không làm việc)
exports.download = function(req, res) {
var filename = "33.jpg";
var filePath = path.join(__dirname, '..', '..', 'downloads', filename);
var stat = fs.statSync(filePath);
var fileToSend = fs.readFileSync(filePath);
res.set('Content-Type', 'image/jpeg');
res.set('Content-Length', stat.size);
res.set('Content-Disposition', filename);
res.send(fileToSend);
};
[Cập nhật 2] Các đôi tập tin có kích thước chứa thêm "efbffd" chuỗi char ngẫu nhiên trong file làm cho nó không thể đọc được
'res.write (fileToSend); res .end(); ' – AdityaParab
Kết quả tương tự. Tôi đoán vấn đề xuất phát từ phương pháp Góc hơn bên Node.JS ... –