将AJAX响应(图像blob)上载到Azure Blob存储:错误414

时间:2015-10-06 21:07:54

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

我能够通过上传按钮成功将文件上传到我的供应商API。我的供应商API还返回blob格式的.png文件,我需要将其上传到Azure Blob存储。我尝试了一些方法,但在我的Node控制台中收到以下错误:

  

[错误] statusCode:414

我的前端代码位于Angular Controller中,该控制器将数据传递回包含Azure Blob存储调用的Node后端。我安装了所需的强大和请求模块,但是我没有在我当前的后端代码中使用它们,因为我收到的数据已经是blob格式。

这是我的前端上传代码。成功"结果"是我返回的blob数据:

$scope.sendToProduction = function () {
    var parts = document.getElementById("file").value.split("\\");
    var uploadedfilename = parts[parts.length - 1];
    var basefilename = uploadedfilename.split(".")[0];
    var fileextension = uploadedfilename.split(".")[1];
    var filename = basefilename + '.' + fileextension;
    var file = document.getElementById("file").files[0];

    var formdata = new FormData();
    formdata.append(filename, file);

    $.ajax({
        url: 'http://myvendorsapi/fileuploadendpoint',
        type: "POST",
        data: formdata,
        mimeType: "multipart/form-data",
        processData: false,
        contentType: false,
        crossDomain: true,

        success: function (result) {
            var filename = 'Test.png';
            var file = result;
            console.log(file);
            $http.post('/postAdvanced', {filename: filename, file: file }).success(function (data) {
                console.log(data);
            }, function (err) {
                console.log(err);
            });
        },

        error: function (error) {
            console.log("Something went wrong!");
        }
    });
};

以下是我的上传到Azure Blob存储的节点后端:

app.post('/postAdvanced', function (req, res, next) {
    var filename = req.body.filename;
    var file = req.body.file;

    blobSvc.createBlockBlobFromText('blob5', file, filename, function (error, result, response) {
        if (!error) {
            console.log("Uploaded" + result);
        }
        else {
            console.log(error);
        }
    });
})

如何将AJAX响应上传到Azure Blob存储?

2 个答案:

答案 0 :(得分:1)

HTTP状态代码414表示“Request-URI太长”。您是否将正确的blob名称传递给blobSvc.createBlockBlobFromText?

答案 1 :(得分:1)

问题在于这行代码:

blobSvc.createBlockBlobFromText('blob5', file, filename, function (error, result, response) {

您的参数顺序错误。它应该是:

blobSvc.createBlockBlobFromText('blob5', filename, file, function (error, result, response) {