所以我有这个代码将图片上传到azure blob storage
。
var blobSvc = azure.createBlobService(config.BLOB_ACCOUNT, config.BLOB_KEY);
controllers.upload = function (req, res, next){
req.pipe(req.busboy);
var fstream;
req.busboy.on('file', function (fieldname, file, filename) {
fstream = fs.createWriteStream(__dirname + '/upload/' + filename);
file.pipe(fstream);
fstream.on('close', function () {
blobSvc.createBlockBlobFromLocalFile('resources',
filename,
fstream.path,
function(error, result, response) {
if (error) {
res.send(error);
return;
}
res.send(result);
});
});
});
}
路径为/var/www/html/foo-project/api/controllers/upload/ragnar.jpg
,帐户名称全是小写字母,没有其他字符,因此是容器名称。
图像肯定存在于该路径上。
但我仍然得到这个错误。
{code: "OutOfRangeInput", statusCode: 400, requestId: "00d83e3f-0001-002f-2c40-8cf7a5000000"}
我该如何解决这个问题?谢谢你的帮助。
修改
完整response
:
答案 0 :(得分:0)
有一个使用快速框架在Azure官方GitHub存储库上通过http请求上传blob的示例,请参阅https://github.com/Azure/azure-storage-node/blob/master/examples/blobuploader/server.js#L97处的源代码第97行。
<强>更新强>
例如,HTML表单如下。
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="text" name="title"><br>
<input type="file" name="upload" multiple="multiple"><br>
<input type="submit" value="Upload">
</form>
以下是使用multiparty包(npm install multiparty
)的代码示例。
var multiparty = require('multiparty');
app.post('/upload', function (req, res) {
var blobService = azure.createBlobService();
var form = new multiparty.Form();
form.on('part', function(part) {
if (part.filename) {
var size = part.byteCount - part.byteOffset;
var name = part.filename;
blobService.createBlockBlobFromStream('<container-name>', name, part, size, function(error) {
if (error) {
res.send({ 'Error': error });
}
});
} else {
form.handlePart(part);
}
});
form.parse(req);
res.send('OK');
});