最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

从缓冲区将文件写入文件系统时,Azure内部服务器错误

运维笔记admin9浏览0评论

从缓冲区将文件写入文件系统时,Azure内部服务器错误

从缓冲区将文件写入文件系统时,Azure内部服务器错误

Context

我正在为会计机器人开发概念证明。解决方案的一部分是处理收据。用户制作收据的图片,机器人会询问一些问题并将其存储在会计解决方案中。

方法

我正在使用BotFramework nodejs示例15。处理将附件加载到arraybuffer并将其存储在本地文件系统中的附件。准备好拿起并发送到会计软件的api。

async function handleReceipts(attachments) {
    const attachment = attachments[0];
    const url = attachment.contentUrl;
    const localFileName = path.join(__dirname, attachment.name);
    try {
     const response = await axios.get(url, { responseType: 'arraybuffer' });
        if (response.headers['content-type'] === 'application/json') {
            response.data = JSON.parse(response.data, (key, value) => {
                return value && value.type === 'Buffer' ? Buffer.from(value.data) : value;
            });
        }
         fs.writeFile(localFileName, response.data, (fsError) => {
            if (fsError) {
                throw fsError;
            }
        });
    } catch (error) {
        console.error(error);
        return undefined;
    }
    return (`success`);
}

在本地运行,所有功能都像一个魅力(也要感谢mdrichardson-MSFT)。存储在Azure上,我得到

发送此消息到您的机器人时出错:HTTP状态代码InternalServerError

我将问题缩小到代码的第二部分。写入本地文件系统(fs.writefile)的部分。小文件和大文件在Azure.fs.writefile接缝上导致相同的错误,无法找到文件]

根据流日志有什么惊喜:

用户上传的附件保存在Azure上

{contentType:'image / png',contentUrl:'/ /0000004/0/25753007.png?t= ',名称:'fromClient :: 25753007.png'}

localFilename(附件的目标)解析为

localFileName:D:\ home \ site \ wwwroot \ dialogs \ fromClient :: 25753007.png

Axios将附件加载到数组缓冲区中。其回应:

response.headers.content-type:image / png

这很有趣,因为它在本地是'application / octet-stream'

fs引发错误:

fsError:错误:ENOENT:没有这样的文件或目录,打开'D:\ home \ site \ wwwroot \ dialogs \ fromClient :: 25753007.png

一些帮助真的很感激。

回答如下:

从Attachment.name中删除:: fromClient前缀解决了它。正如@Sandeep在评论中提到的那样,特殊字符可能在哪里出现问题。不知道它的目的是什么。将在Botframework示例库github存储库中提及它

发布评论

评论列表(0)

  1. 暂无评论