We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
这里的nodejs后台依赖为koa,koa不能直接从请求中获取file,我们需要引入一个插件koa-body,koa-body有两种嵌入方式一种是在app.js中使用use,第二种是在路由层面,针对于某个路由嵌入,例如:
router.post('/upload/:interface', koaBody({ multipart: true, encoding: 'gzip', onError: (error, ctx) => { ctx.body = { code: 400, error }; }, }) , InterfaceController.upload)
这里要说明一下,koabody中有formidable属性,通过对该属性配置,其实就可以实现文件的上传以及下载,这里为了让路由层面的代码整洁,所以没有直接在koabody层面上做属性配置,还有一点要值得注意koabody中有formidable属性并不全和node-formidable的api相比,很多属性并不能使用,例如progress、end、error等,这些都没有。 另外一点要注意的是koabody的版本,版本不同会导致按照网上搜到的教程从ctx中获取file的属性层级会不同,我使用的是koabody v4.1.0。
static async upload(ctx) { //获取请求中的接口名称 let interfaceName = ctx.params.interface; //获取文件 const file = ctx.request.files['file']; //创建文件reader const reader = fs.createReadStream(file.path); // 最终要保存到的文件夹目录,这里我放在server的上一层目录,创建api3/public/upload/接口名称的文件夹 const dir = path.join(path.resolve(__dirname, '../../'), `api3/public/upload/${interfaceName}`); // 检查文件夹是否存在如果不存在则递归新建文件夹 if (fs.existsSync(dir) === false) { utils.mkdirs(dir); } // 重新覆盖 file.path 属性 file.path = `${dir}/${file.name}`; //创建文件流并写入 const stream = fs.createWriteStream(file.path); reader.pipe(stream); //返回文件的路径 ctx.body = { code: '1000', msg: "上传成功", data: { path: file.path } } }
这里用到了一个递归创建文件夹的方法
/** * 递归创建文件夹 * @param {String} dirpath 创建的文件夹路径 */ utils.mkdirs = function mkdirs(dirpath){ if (!fs.existsSync(path.dirname(dirpath))) { mkdirs(path.dirname(dirpath)); } fs.mkdirSync(dirpath); }
到这里就在koa中实现文件的上传功能,当文件上传成功之后,返回文件的路径
The text was updated successfully, but these errors were encountered:
No branches or pull requests
nodejs 实现文件上传
这里的nodejs后台依赖为koa,koa不能直接从请求中获取file,我们需要引入一个插件koa-body,koa-body有两种嵌入方式一种是在app.js中使用use,第二种是在路由层面,针对于某个路由嵌入,例如:
这里要说明一下,koabody中有formidable属性,通过对该属性配置,其实就可以实现文件的上传以及下载,这里为了让路由层面的代码整洁,所以没有直接在koabody层面上做属性配置,还有一点要值得注意koabody中有formidable属性并不全和node-formidable的api相比,很多属性并不能使用,例如progress、end、error等,这些都没有。
另外一点要注意的是koabody的版本,版本不同会导致按照网上搜到的教程从ctx中获取file的属性层级会不同,我使用的是koabody v4.1.0。
这里用到了一个递归创建文件夹的方法
到这里就在koa中实现文件的上传功能,当文件上传成功之后,返回文件的路径
The text was updated successfully, but these errors were encountered: