【问题标题】:Azure blob storage createBlockBlobFromLocalFile() has Error : OutOfRangeInputAzure Blob 存储 createBlockBlobFromLocalFile() 有错误:OutOfRangeInput
【发布时间】:2016-07-21 15:46:33
【问题描述】:

所以我有这个代码可以将图像上传到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

【问题讨论】:

  • 能否提供您的请求 URL 和帐户名称?
  • @ZhaoxingLu-Microsoft 抱歉,我认为这些是敏感信息。对不起。
  • 哦,抱歉,我应该知道的。

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


【解决方案1】:

Azure 官方 GitHub 存储库中有一个使用 express 框架通过 http 请求上传 blob 的示例,请参阅源代码第 97 行https://github.com/Azure/azure-storage-node/blob/master/examples/blobuploader/server.js#L97


更新

例如下面的 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');
});

【讨论】:

  • 我按照代码form.parse()回调有3个参数errfieldsfilesfields 返回空 {} 因此上传再次返回相同的错误 OutOfRangeInput :/
  • 另外,我应该从表单上传什么样的文件?我需要转换成什么吗?
  • @TheGreenFox 我更新了一个代码示例,用于将函数 createBlockFromStream 与节点包 multiparty 一起使用。包multiparty 解析表单数据。有任何问题,请随时告诉我。
  • @TheGreenFox 有什么问题吗?
猜你喜欢
  • 2020-06-26
  • 1970-01-01
  • 2021-07-09
  • 2017-04-17
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2019-05-19
  • 2018-02-26
相关资源
最近更新 更多