0

我正在使用带有角度前端的节点 js api 服务。我有一个功能,我需要将一些文档从谷歌驱动器迁移到天蓝色存储。我已经在 node.js 中实现了 azure blobService交互。我使用 XHR 请求从谷歌驱动器以角度下载文档,将其转换为 Uint8array,然后将其传递给节点 js 服务以上传到 azure。我正在使用blobService.createBlockBlobFromStream()方法上传到 azure。这需要一个可读流作为输入参数。我是节点 js 和节点流的新手。如何将我的 Uint8array 对象转换为可读流?如果不是 Uint8array,我可以使用其他类型来简化转换吗?我已经粘贴了下面的代码。提前感谢所有帮助...

角码

function requestXHR1(url, accessToken, fileId, type) {
                var xmlHttpReq = new XMLHttpRequest()
                xmlHttpReq.onload = function () {                       

                    uploadBlob(fileId, type, new Uint8Array(xmlHttpReq.response))
                        .then(function (data) {
                            migI++;
                            console.log("total: " + migI + ", uploaded fileId " + fileId);
                        },
                        function (error) {
                            console.log("error uploading fileId " + fileId);
                        });

                }

                xmlHttpReq.open('GET', url, true);
                xmlHttpReq.setRequestHeader('Authorization', 'Bearer ' + accessToken);
                xmlHttpReq.responseType = 'arraybuffer';



                xmlHttpReq.send(null);

}

function uploadBlob(fileName, contentType, file) {
        return $http({
            method: 'POST',
            url: config.baseUrl + 'uploadfile',
            data: { fileName: fileName, contentType: contentType, file: file },
            headers: {
                'Content-Type': 'application/json; charset=utf-8'
            }
        }).then(function (data) {
        }, function (error) {
        });
}

Node.js 代码

function uploadBlob(req, res) {
  var blobSvc = azure.createBlobService(config.azureStorageAccount, config.azureSharedKey);
  var fileStream = ConvertToReadableStream(file); //How do I write this function?

  blobSvc.createBlockBlobFromStream(config.azureContainer, req.body.fileName, fileStream,
    req.body.file.length, { contentType: req.body.contentType, blockSize: customBlockSize }, function (error, result, response) {
        if (!error) {
            console.log("blob uploaded");
            res.status(200).send("success");
        }
        else
            res.send("failure");
    })
}
4

0 回答 0