Я попытался использовать ваш код для загрузки блоба изображения на локальный URL моего владельца http://localhost/upload
, затем обнаружил, что в свойстве file
вашего formData
.
отсутствуют некоторые свойства.мой код работает.
const request = require('request');
const storage = require('azure-storage');
var accountName = '<your storage account name>';
var accountKey = '<your storage account name>';
var blobService = storage.createBlobService(accountName, accountKey);
let stream = blobService.createReadStream(containerName, blobName, function(err, res){
formdata.file.options.contentType = res.contentSettings.contentType;
console.log(formdata);
});
var formdata = {
rootMessageId: messageId,
file: { // missing some properties
value: stream,
options: {
filename: function(blobName) {
var elems = blobName.split('/');
return elems[elems.length-1];
}(blobName),
knownLength: stream // a required property of `file` is `knownLength` which will cause server error if be missed.
},
}
}
request.post({
url: 'https://host-name/Api/comment', // I used my url `http://localhost/upload` at here
headers: {'Authorization': `Token ${authToken}`}, // I used a empty {} as header at here
formData: formdata
}, (err, res, body) => {
console.log(res)
}
});
Думая о приведенном выше коде, он должен передавать поток загрузки в поток загрузки, и все данные также должны проходить через ваш веб-приложение.Исходя из моего опыта, я думаю, что вы можете сгенерировать URL-адрес большого двоичного объекта SAS для публикации в вашем REST API, а затем загрузить большой двоичный объект через сервер REST, если вы можете изменить код своего сервера приложений REST.