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

Upload AJAX response (image blob) to Azure Blob Storage: Error 414

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

[Error] statusCode: 414

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

这是我的前端上传代码。成功"result"是我返回的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 存储?

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

问题是在这行代码中:

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

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

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