Node.js Не может конвертировать x-zip-сжатый файл в приложение /zip
Вот часть моего кода, которая загружает zip-файл, загруженный в BLOB-объект Azure, и отправляет его вызывающей стороне.
Тип содержимого, возвращаемый Azure: application/x-zip-compressed
, Однако мне нужно вернуться application/zip
, Если я не установил заголовок в моем коде, он возвращает text/plain; charset=utf-8
, Если я устанавливаю заголовок, как в моем коде ниже, он возвращает application/zip; charset=utf-8
, В результате, даже если файл загружен, я не могу открыть его с помощью winzip.
У меня вопрос, как мне преобразовать файл в application/zip
?
var express = require('express');
var request = require('request');
var router = express.Router();
router.post('/', function (req, res) {
request.get("https://path-to-my-azure-storage-blob/"+ fileName, function (error, response, body) {
if (error){
console.log('error:', error); // Print the error if one occurred
} else {
console.log("Status Code: ", response.statusCode)
console.log("Content-type: ", response.headers['content-type'])
res = {
"status": 200,
"headers": {
'Content-Type': 'application/zip'
},
"body": body
};
res.end();
}
});
})
1 ответ
Почему загруженный BLOB / ZIP-архив "поврежден", здесь можно получить ответ /questions/4725464/uzel-zagruzka-zip-cherez-zapros-zip-povrezhden/4725467#4725467
Таким образом, решение (которое может быть упрощено еще больше, если вы хотите)
request.get("https:/....blob.core.windows.net/folder/some.zip", null)
.on('error', (error) => {
console.log(error);
})
.on('response', function(response) {
res.writeHead(200, {
'Content-Type': response.headers['content-type'],
'Content-disposition': 'attachment;filename=anotherfilename.zip',
'Content-Length': response.headers['content-length']
});
})
.on('data', (d) => {
res.write(d);
})
.on('end', () => {
res.end()
});
Вы можете узнать, как передать ответ от Azure напрямую клиенту, здесь https://github.com/request/request.