使用 Node 和 graphql 将文件流式上传到 Azure Blob 存储
Posted
技术标签:
【中文标题】使用 Node 和 graphql 将文件流式上传到 Azure Blob 存储【英文标题】:Stream upload file to Azure blob storage with Node and graphql 【发布时间】:2021-01-10 10:28:12 【问题描述】:我需要使用 nodejs 和 apollo-server-express 将图像存储到 Azure blob 存储。我使用 createBlockBlobFromStream
进行存储,但它需要流长度。如何找到流长度?
有没有更好的方法使用 graphql 将图像存储到 azure blob 存储
uploadImageFunc
由解析器通过传递参数调用
const fs = require('fs')
const azure = require('azure-storage')
const blobService = azure.createBlobService("connection string")
const uploadImageFunc = async function(args)
return args.file.then(file =>
const createReadStream, filename, mimetype = file
const fileStream = createReadStream()
blobService.createBlockBlobFromStream('container-name',filename,fileStream,"fileStream.length",(error,response) =>
if(!error)
console.log(response)
)
fileStream.pipe(fs.createWriteStream(__dirname+`/uploadedFiles/$filename`))
return file;
);
module.exports = uploadImageFunc;
感谢回复
【问题讨论】:
你试过这个***.com/a/18384827/13308381吗? 【参考方案1】:实际上,流大小存在于请求的内容长度中。 req.headers['content-length']
的内容长度为字符串。使用 parseInt 将其转换为 int 并将其传递给 createBlockBlobFromStream
函数。
const fs = require('fs')
const v4: uuidv4 = require('uuid');
const azure = require('azure-storage')
const blobService = azure.createBlobService(process.env.AZURE_STORAGE_CONNECTION_STRING)
const contestEntryModel = require('../models/contestEntryModel')
const uploadImageFunc = async function(args,req, res)
return args.file.then ( file =>
const createReadStream, filename, mimetype = file
let streamSize = parseInt(req.headers['content-length'])
const fileStream = createReadStream()
const newFilename = uuidv4()
blobService.createBlockBlobFromStream('<container name>',`$args.contestId/$newFilename`,fileStream,streamSize,(error,response) =>
if(!error)
let entry =
url:`<blobstorage url>/$args.contestId/$newFilename`,
participant: req.userId
contestEntryModel.findOneAndUpdate(contestId: args.contestId,$push:entries:entry,(err, doc) =>
console.log("updated")
)
)
return true;
);
module.exports = uploadImageFunc;
【讨论】:
以上是关于使用 Node 和 graphql 将文件流式上传到 Azure Blob 存储的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 GraphQL 和 Apollo 将文件上传到 Strapi