首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Azure函数应用程序临时文件夹中保存Excel文件时出错

在Azure函数应用程序临时文件夹中保存Excel文件时出错
EN

Stack Overflow用户
提问于 2022-07-20 15:44:12
回答 1查看 49关注 0票数 0

我有一个用NodeJS编写的Azure函数应用程序,它生成一个Excel文件并将其作为附件发送。

我使用npm包ExcelJS创建NodeMailer文件,使用npm包NodeMailer作为附件发送该文件。

下面是我的Azure函数index.js:

代码语言:javascript
代码运行次数:0
运行
复制
import { AzureFunction, Context } from "@azure/functions";
import * as azdev from "azure-devops-node-api";
import * as witif from "azure-devops-node-api/interfaces/WorkItemTrackingInterfaces";
import * as witapi from "azure-devops-node-api/WorkItemTrackingApi"

const timerTrigger: AzureFunction = async function (context: Context, myTimer: any): Promise<void> {
    let orgUrl = "https://dev.azure.com/{organization name}"
    let token = process.env["DEVOPS_TOKEN"] // token gets inserted during runtime
    let authHandler = azdev.getPersonalAccessTokenHandler(token); 
    let connection = new azdev.WebApi(orgUrl, authHandler);
    const ExcelJS = require('exceljs');
    const { DateTime } = require("luxon");
    const nodemailer = require("nodemailer");

    const queryId = "....8798987"; // work item query id from Azure Boards
    const wit: witapi.IWorkItemTrackingApi = await connection.getWorkItemTrackingApi();
    const result = await wit.queryById(queryId);

    if (result == null)
    {
        throw new Error("Result was null.");
    }

    // generate Excel file
    const workbook = new ExcelJS.Workbook();
    workbook.creator = 'Me';
    workbook.lastModifiedBy = 'Me';
    workbook.created = new Date();
    const sheet = workbook.addWorksheet('Query Results');

    let colNames: string[] = [];
    let colRefNames: string[] = [];
    let queryItems = [];
    let fields: string[] = []

    for (let col of result.columns) {
        colNames.push(col.name);
        colRefNames.push(col.referenceName);
    }
    sheet.columns = colNames;

    for (let item of result.workItems) {
       queryItems.push(await wit.getWorkItem(item.id, colRefNames) )
    }

    for (let q of queryItems) {
        for (let f of Object.keys(q.fields)) {
            if (f == 'System.AssignedTo') {
                sheet.addRow(q.fields[f].displayName)
            } else {
                sheet.addRow(q.fields[f])
            }
        }
    } 
    const currentdate = DateTime.now().toFormat('MM-dd-yy');
    context.log('creating Excel file');
    workbook.xlsx.writeFile('./%TMP%/workitemquery_' + currentdate + '.xlsx').then(() => {
        context.log('saved');
    }).catch((err) => {
        context.log('err', err);
    })

    // Send the email
    const transporter = nodemailer.createTransport({
        host: "{SMTP Server IP address}",
        port: 50025,
        secure: false,
    });

    const mailOptions = {
        ...
        attachments: [
            filename: 'workitemquery_' + currentdate + '.xlsx',
            path: './%TMP%/workitemquery_' + currentdate + '.xlsx'
        ]
    }

    context.log('Sending email');
    let info = await transporter.sendMail({mailOptions, function(error, info) {
            if (error) {
                context.log("sent mail error: " +error.message);
            }
            context.log(info.response);
        }
    });       
};

export default timerTrigger;

当我运行函数应用程序时,它会在workbook.xlsx.writeFile函数期间失败,并给出以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
err [Error: ENOENT: no such file or directory, open 'C:\home\site\wwwroot\%TMP%\workitemquery_11-20-22.xlsx'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\home\\site\\wwwroot\\%TMP%\\workitemquery_11-20-22.xlsx'
}

我试图将文件保存到函数应用程序的临时文件夹中,这个文件夹是%TMP%,但是它保存在错误的位置。如何将Excel文件保存在正确的文件夹中,以便sendMail函数能够找到它?

EN

回答 1

Stack Overflow用户

发布于 2022-07-20 18:27:20

我知道问题出在哪里了。部分问题是Azure函数存储帐户中没有临时文件夹。我创建了这个文件夹路径C:\local\Temp。第二部分是我必须使用Windows格式硬编码文件路径,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
await workbook.xlsx.writeFile('C:\\local\\Temp\\workitemquery_' + currentdate + '.xlsx')

attachments: [
            {
                filename: 'ukfastserverquery_' + currentdate + '.xlsx',
                path: 'C:\\local\\Temp\\workitemquery_' + currentdate + '.xlsx'
            }
        ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73054575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档