在next.js中创建上载文件api

在next.js中创建上载文件api,next.js,Next.js,是否可以在next.js中创建文件上载api?(使用/api目录) 或者我必须在线使用外部第三方服务? 在网上找不到任何示例。 谢谢如果您使用的是定制的express服务器,那么您应该研究如何为express而不是NextJS创建上载端点 如果您正在查看页面内的新/api目录,那么我恐怕没有太多信息可供帮助。是的,如果不存在目录,可以创建目录 下面的示例使用从用户请求发布的动态目录名 const express=require('express'); const multer=require('

是否可以在next.js中创建文件上载api?(使用/api目录) 或者我必须在线使用外部第三方服务? 在网上找不到任何示例。
谢谢

如果您使用的是定制的express服务器,那么您应该研究如何为express而不是NextJS创建上载端点


如果您正在查看页面内的新/api目录,那么我恐怕没有太多信息可供帮助。

是的,如果不存在目录,可以创建目录

下面的示例使用从用户请求发布的动态目录名

const express=require('express');
const multer=require('multer');
var fs=需要('fs');
函数checkDestDir(请求、恢复、下一步){
const res.directory=req.body.directory;
const{directory}=res;
exists(目录,函数)(exists){
如果(存在){
next();
}
否则{
fs.mkdir(目录、函数(err){
如果(错误){
log('创建目录时出错');
next();
}
next();
})
}
})
}
常量app=express();
应用程序获取(“/”,(请求,请求)=>{
res.sendFile(uu dirname+'/index.html');
});
app.post('/upload',checkDestDir,multer({dest:res.directory}).single('file'),(req,res)=>{
res.redirect('/');
});

您可以使用Next.js API路由上载文件

带有默认Next.js主体解析的示例 API处理程序

导出默认值(请求、恢复)=>{
//req.body包含上载文件的内容+标题
}
req.body
是一个
字符串
,开头包含相关的HTTP头,如

------WebKitFormBoundarydj2uhBXPZtD3nte3
Content-Disposition: form-data; name="your_input_name"; filename="your_file_name.json"
Content-Type: application/json
your file content is here!
因此,您需要从中取出内容。可能有一些软件包可以做到这一点

或者,您可以使用第三方包解析请求

以身作则 API处理程序

import{IncomingForm}来自“强大”
//您可能希望使用常规的“fs”,而不是承诺的
从“fs”导入{promises as fs}
//首先,我们需要禁用默认的主体解析器
导出常量配置={
api:{
bodyParser:false,
}
};
导出默认异步(req,res)=>{
//使用承诺包装器解析表单
常量数据=等待新承诺((解决、拒绝)=>{
常数形式=新收入形式()
解析(请求,(错误,字段,文件)=>{
如果(错误)返回拒绝(错误)
解析({字段,文件})
})
})
//从临时路径读取文件
const contents=wait fs.readFile(数据?.files?.nameofInput.path{
编码:“utf8”,
})
//contents是一个包含上传文件内容的字符串,所以您可以读取或存储它
}

上述示例中的代码仅用于说明目的。至少需要用正确的错误处理将其包装在
try catch
语句中。

谢谢你的评论,我在谈论新的api目录。这个评论与我的问题有什么关系?我询问了next.js和/api-route的情况。nextjs可以使用定制的服务器expressjs,并且/api-route可以在我的示例末尾的
/upload
中看到。这是一个API,用于侦听post方法到
/upload
url。在这种情况下,不需要自定义服务器禁用默认的主体解析器就可以了!谢谢