Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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
Javascript Azure函数don';无法接受在远程服务器上创建文件_Javascript_Node.js_Azure Functions_Fs_Azure Blob Storage - Fatal编程技术网

Javascript Azure函数don';无法接受在远程服务器上创建文件

Javascript Azure函数don';无法接受在远程服务器上创建文件,javascript,node.js,azure-functions,fs,azure-blob-storage,Javascript,Node.js,Azure Functions,Fs,Azure Blob Storage,我会在本地下载文件,创建一个流,然后发送到API 在本地主机中,通过blobClient.downloadToFile(defaultFile)创建文件 但当我部署函数时,它找不到要流的文件,所以我认为下载不会发生或位置不好 我得到这个错误 [Error: ENOENT: no such file or directory, open 'D:\home\site\wwwroot\importPbix\exampleName.pbix' 这是我的密码 const blobServiceClien

我会在本地下载文件,创建一个流,然后发送到API

在本地主机中,通过
blobClient.downloadToFile(defaultFile)创建文件

但当我部署函数时,它找不到要流的文件,所以我认为下载不会发生或位置不好

我得到这个错误

[Error: ENOENT: no such file or directory, open 'D:\home\site\wwwroot\importPbix\exampleName.pbix'
这是我的密码

const blobServiceClient = BlobServiceClient.fromConnectionString(
  process.env.CONNEXION_STRING
);
const containerClient = blobServiceClient.getContainerClient(
  params.containerName
);
const blobClient = containerClient.getBlobClient(process.env.FILE_LOCATION); // get file from storage
let blobData;
var defaultFile = path.join(params.baseDir, `${params.reportName}.pbix`); // use path module
let stream;

try {
  blobData = await blobClient.downloadToFile(defaultFile);
  console.log(blobData);
  stream = fs.createReadStream(defaultFile);
} catch (error) {
  params.context.log(error);
  console.log(error);
}
var options = {
  method: "POST",
  url: `https://api.powerbi.com/v1.0/myorg/groups/${params.groupId}/imports?datasetDisplayName=${params.reportName}`,
  headers: {
    "Content-Type": "multipart/form-data",
    Authorization: `Bearer ${params.accessToken} `,
  },
  formData: {
    "": {
      value: stream,
      options: {
        filename: `${params.reportName}.pbix`,
        contentType: null,
      },
    },
  },
};
//check if file keep in mem
return new Promise(function (resolve, reject) {
  request(options, function (error, response) {
    if (error) {
      params.context.log(error);

      reject(error);
    } else {
      params.context.log(response);
      resolve(response.body);
    }
    fs.unlinkSync(defaultFile);
  });
});

我发现这有同样的问题,这就是为什么我使用
path
模块并将uu dirname传递给function
params.baseDir

如果您想从Azure blob下载一个文件并将其作为流读取,请尝试下面的代码,在本演示中,我尝试将.txt文件下载到临时文件夹(您应该首先在Azure函数上创建它)并从流中打印其内容以进行快速测试:

module.exports = async function (context, req) {
    
    const { BlockBlobClient } = require("@azure/storage-blob")
    const fs = require('fs')
  

    const connStr = '<connection string>'
    const container = 'files'
    const blobName = 'test.txt'
    const tempPath = 'd:/home/temp/'
    const tempFilePath = tempPath + blobName

    const blobClient = new BlockBlobClient(connStr,container,blobName);

    await blobClient.downloadToFile(tempFilePath).then(async function(){
        context.log("download successfully")

        let stream =  fs.createReadStream(tempFilePath)
        //Print text content,just check if stream has been readed successfully
        context.log("text file content:")
        context.log(await streamToString(stream))

        //You can call your API here...
    })

    function streamToString (stream) {
        const chunks = [];
        return new Promise((resolve, reject) => {
          stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
          stream.on('error', (err) => reject(err));
          stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
        })
      }
    
    context.res = {       
        body: 'done'
    }

}
module.exports=异步函数(上下文,请求){
const{BlockBlobClient}=require(@azure/storage blob)
常量fs=require('fs')
constconnstr=''
const容器='files'
const blobName='test.txt'
常量tempPath='d:/home/temp/'
常量tempFilePath=tempPath+blobName
const blobClient=new BlockBlobClient(connStr,container,blobName);
等待blobClient.downloadToFile(tempFilePath){
log(“下载成功”)
let stream=fs.createReadStream(tempFilePath)
//打印文本内容,只需检查流是否已成功读取
log(“文本文件内容:”)
log(等待streamToString(流))
//你可以在这里调用你的API。。。
})
函数streamToString(流){
常量块=[];
返回新承诺((解决、拒绝)=>{
stream.on('data',(chunk)=>chunks.push(Buffer.from(chunk));
stream.on('error',(err)=>reject(err));
stream.on('end',()=>resolve(Buffer.concat(chunks.toString('utf8'));
})
}
context.res={
正文:“完成”
}
}
结果

文件已下载:

已成功读取为流:


您基于什么操作系统?Linux还是Windows(我指的是azure功能)?Windows我想是的,我使用的是消费计划应用程序设置中是否设置了此设置:
process.env.FILE\u LOCATION
?进展如何?您的问题解决了吗?