Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点和graphql将文件流上载到Azure blob存储_Node.js_Azure_Graphql_Apollo Server - Fatal编程技术网

Node.js 使用节点和graphql将文件流上载到Azure blob存储

Node.js 使用节点和graphql将文件流上载到Azure blob存储,node.js,azure,graphql,apollo-server,Node.js,Azure,Graphql,Apollo Server,我需要使用nodejs和apollo server express将图像存储到Azure blob存储。我使用createBlockBlobFromStream进行存储,但它需要流长度。如何找到流的长度? 有没有更好的方法使用graphql将图像存储到azure blob存储 解析程序通过传递args调用uploadImageFunc const fs = require('fs') const azure = require('azure-storage') const blobService

我需要使用nodejs和apollo server express将图像存储到Azure blob存储。我使用
createBlockBlobFromStream
进行存储,但它需要流长度。如何找到流的长度? 有没有更好的方法使用graphql将图像存储到azure blob存储

解析程序通过传递args调用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;

感谢您的回复

事实上,流大小存在于请求的内容长度中
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;
const fs=require('fs'))
const{v4:uuidv4}=require('uuid');
const azure=require('azure-storage')
const blobService=azure.createBlobService(process.env.azure\u存储\u连接\u字符串)
const contestientrymodel=require(“../models/contestientrymodel”)
const uploadImageFunc=异步函数(args,{req,res}){
返回args.file.then(文件=>{
const{createReadStream,filename,mimetype}=file
让streamSize=parseInt(请求头['content-length'])
const fileStream=createReadStream()
const newFilename=uuidv4()
blobService.createBlockBlobFromStream(“”,`${args.contesticId}/${newFilename}`,fileStream,streamSize,(错误,响应)=>{
如果(!错误){
让输入={
url:`/${args.contesticId}/${newFilename}`,
参与者:req.userId
}
QuestientryModel.findOneAndUpdate({contesticID:args.contesticID},{$push:{entries:entry}},(err,doc)=>{
控制台日志(“更新”)
})
}
})
返回true;
});
}
module.exports=上传ImageFunc;
您试过这个吗?