如何不访问文件系统向OpenAI API发送文件?已获取文件内容字符串
不通过文件系统向OpenAI API上传字符串内容的文件
要实现直接用字符串内容上传文件,核心是构造符合multipart/form-data格式的请求体——OpenAI API要求上传文件时必须包含文件名、文件类型等元信息,单纯的Readable流缺少这些关键参数,所以无法正常工作。以下是可行的实现方案:
方案1:用form-data库构造请求体(Node.js环境)
步骤1:安装依赖
确保已安装OpenAI SDK和form-data库:
npm install openai form-data
步骤2:实现代码
const { OpenAI } = require('openai'); const FormData = require('form-data'); const openai = new OpenAI({ apiKey: '你的API密钥' }); async function uploadStringAsFile() { // 你的文件内容字符串 const fileContents = '这是要上传的文件内容,比如JSONL格式的训练数据'; const formData = new FormData(); // 将字符串作为文件添加到表单,指定文件名和内容类型 // 这里以JSONL文件为例,根据你的文件类型调整contentType formData.append('file', fileContents, { filename: 'training_data.jsonl', contentType: 'application/jsonl' }); // 指定文件用途,比如"fine-tune" formData.append('purpose', 'fine-tune'); // 调用API上传文件 const response = await openai.files.create({ file: formData, purpose: 'fine-tune' }); console.log('文件上传成功,文件ID:', response.id); } uploadStringAsFile().catch(console.error);
方案2:直接传入Buffer(简化版)
如果不想依赖form-data库,也可以将字符串转为Buffer,同时指定文件名和类型:
const { OpenAI } = require('openai'); const openai = new OpenAI({ apiKey: '你的API密钥' }); async function uploadBufferAsFile() { const fileContents = '你的文件内容字符串'; // 将字符串转为Buffer const fileBuffer = Buffer.from(fileContents); const response = await openai.files.create({ // 传入Buffer,同时指定文件名和Content-Type file: new Blob([fileBuffer], { type: 'application/jsonl' }), filename: 'training_data.jsonl', purpose: 'fine-tune' }); console.log('文件上传成功,文件ID:', response.id); } uploadBufferAsFile().catch(console.error);
关键注意事项
- 必须指定filename和contentType:OpenAI API需要这些信息解析文件类型,缺少会导致上传失败。
- 按需调整
contentType:比如文本文件用text/plain,CSV用text/csv,JSONL用application/jsonl等。 purpose参数要合法:比如用于微调填fine-tune,用于助手检索填assistants,需符合OpenAI API的要求。
内容的提问来源于stack exchange,提问作者Tekx
相关产品推荐
相关产品推荐

