Azure blob存储createBlockBlobFromLocalFile()有错误:OutOfRangeInput

时间:2016-04-01 18:09:11

标签: node.js azure azure-storage-blobs

所以我有这个代码将图片上传到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,帐户名称全是小写字母,没有其他字符,因此是容器名称。

图像肯定存在于该路径上。

enter image description here

但我仍然得到这个错误。

{code: "OutOfRangeInput", statusCode: 400, requestId: "00d83e3f-0001-002f-2c40-8cf7a5000000"}

我该如何解决这个问题?谢谢你的帮助。

修改

完整response

enter image description here

1 个答案:

答案 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');
});