Uploading a .json file with Lambda results in an error.
static async CreateLocalFile({ file, user_id, date, type }) { try { const filePath = path.join("/tmp", `${user_id}-${type}-${date}.json`); const jsonData = JSON.stringify(file); fs.writeFileSync(filePath, jsonData, { encoding: "utf8" }); return filePath; } catch (error) { console.error("Error creating local file:", error.message); throw error; } } static async UploadFiles(params) { try { const filePath = await this.CreateLocalFile(params); const files = await openai.files.create({ file: fs.createReadStream(filePath), purpose: "assistants", }); return files; } catch (error) { console.error("Error uploading file:", error.message); throw error; } }
从你提供的代码和错误信息来看,问题可能出现在你试图上传的文件格式上。你试图上传的是一个 .json
文件,但根据错误信息提示,你可能正在使用一个不正确的文件格式进行上传。
在 OpenAI 的 API 中,files.create
方法需要的 file
参数应该是一个可读流(Readable Stream),这通常是由一个文件系统(fs)模块的 createReadStream
方法创建的。然而,从你提供的代码中看,你正在将一个 JSON 对象转换成字符串,并将其写入一个文件,然后再将这个文件作为一个可读流上传。
在大多数情况下,你应该直接将文件流(stream)上传给 OpenAI,而不是首先将文件内容转换成字符串并写入磁盘。你可以尝试使用 fs.createReadStream
直接从源文件创建一个流,而不是先将文件内容转换成字符串。
这是一个改进的例子:
const { createWriteStream, fs } = require('fs');const openai = require('openai-api'); // Assuming you have this OpenAI moduleconst path = require('path');async function UploadFiles(params) { try { const filePath = path.join("/tmp", `${params.user_id}-${params.type}-${params.date}.json`); const writeStream = fs.createWriteStream(filePath); const files = await openai.files.create({ file: writeStream, purpose: "assistants", }); return files; } catch (error) { console.error("Error uploading file:", error.message); throw error; }}
这个代码片段将创建一个可写流,然后将其传递给 openai.files.create
方法。这样做的前提是,你的源文件数据是一个可读流(例如,你可能已经从某个地方获取了一个文件流)。如果不是这样,你可能需要首先读取源文件,创建一个可读流,然后再将其传递给 openai.files.create
方法。