【问题标题】:How to for loop a multiparty file upload?如何循环多方文件上传?
【发布时间】:2016-04-01 05:38:06
【问题描述】:

我正在为客户构建网站,他们需要将多个文件(这很重要)上传到 Azure Blob 存储容器。我目前使用此代码:

app.post("/upload", function (req, res) {
     var blobService = azure.createBlobService("mainwebsite", "XXX");
     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("images", name, part, size, function(error) {
                res.send({ success: "Your file(s) have been uploaded successfully."});
            });
        } else {
            return;
        }
    });
    form.parse(req);
});

我需要更改此代码,以便枚举传递给 POST 请求的所有文件。有人可以帮我解释一下吗?

【问题讨论】:

    标签: node.js azure http-post azure-blob-storage multipart


    【解决方案1】:

    您可以利用函数createWriteStreamToBlockBlob(),它将返回一个writeStream,然后将pipe 部分返回到writeStream,这里是代码sn-p:

    router.get('/multipart', function (req, res){
        res.send(
            '<form action="/test/multipart" enctype="multipart/form-data" method="post">' +
            '<input type="file" name="upload[]" multip le="multiple"><br>' +
            '<input type="file" name="upload[]" multiple="multiple"><br>' +
            '<input type="submit" value="Upload">' +
            '</form>'
        )
    })
    router.post('/multipart', function (req, res) {
        var form = new multiparty.Form({});
        var files = [];
        var finished = [];
        form.on("part", function (part) {
            if (part.filename) {
                var size = part.byteCount - part.byteOffset;
                var name = part.filename;
                var out = blobsrv.createWriteStreamToBlockBlob("images", name);
                out.on("finish", function () {
                    console.log("finish upload file: " + name);
                    finished.push(name);
                    if (finished.length == files.length) {
                        res.send(JSON.stringify(finished))
                    }
                })
                part.on('end', function () {
                    console.log('part end')
                    files.push(name);
                })
                part.pipe(out)
            } else {
                return;
            }
        });
    
        form.parse(req);
    })
    

    【讨论】:

    • 我在运行它时收到“请求中止”错误。这是堆栈跟踪:gist.github.com/nhubbard/edc581e7afb51397997c
    • 上传文件的大小是多少?这是您的类似问题,您可以参考github.com/andrewrk/node-multiparty/issues/118。如果您方便,请提供您的代码 sn-p 它将引发问题,以便我们重现问题。
    • 没关系,我有一个非常模糊的语法错误。发生在我们最好的人身上。 :-) 您的答案已被标记为正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多