用于上传图片的方库(CKEditor-简单上传适配器)。
第三方库发送的发布请求的字段名称与“ 文件”不同。
我还需要更改默认的上传响应,以便CKEditor可以使用它。
响应必须为:
{ "url": 'http://localhost:3001/myimage.jpg'}
我尝试了什么: 创建了一个自定义上传图像服务,该服务使用@ koa / multer存储文件。但是,该路径始终是一个临时文件夹,我无法将其更改为更好的目的地。
当使用不带皮带的multer的koajs时,我可以更改目标,仅当与皮带式一起使用时,路径是临时文件夹。在此处查看该存储库: https://github.com/kolomu/koajs-example-server-multer
如何重现我的问题: 使用此html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="http://localhost:1337/customupload" method="POST" enctype="multipart/form-data">
<input type="file" name="upload" />
<button type="submit">send</button>
</form>
</body>
</html>
创建自定义服务MyUpload.js
var multer = require('@koa/multer');
const path = require('path');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
console.log('in dest');
cb(null, path.resolve(__dirname, './public'));
},
filename: function (req, file, cb) {
console.log('in filename');
let fileName = file.originalname.toLowerCase();
let fileExtension;
if (fileName.endsWith('.jpg')) {
fileExtension = '.jpg';
} else if (fileName('.png')) {
fileExtension = '.png'
}
cb(null, file.fieldname + '-' + Date.now() + fileExtension)
}
});
const upload = multer({ storage: storage });
module.exports = {
imgUpload: (ctx) => {
console.log('in imgUpload!');
console.log('ctx');
console.log(ctx)
upload.single('upload')(ctx, () => {
console.log('ctx.request.files', ctx.request.files);
console.log('ctx.files', ctx.files);
ctx.body = 'done';
});
}
};
创建一个控制器:
'use strict';
module.exports = {
handleUpload: async ctx => {
strapi.services.myupload.imgUpload(ctx);
ctx.send('Hello World!' + JSON.stringify(ctx));
},
};
创建适当的路线:
{
"routes": [
{
"method": "POST",
"path": "/customupload",
"handler": "Custom.handleUpload",
"config": {
"policies": []
}
}
]
}
现在,当上传文件时,您将在节点日志中看到该路径是本地临时文件夹,而不是“ public”。
另一种方法: 因此,我认为另一种方法是创建自定义上传提供程序。但是,使用标准上传过程时,字段名称也必须是“文件”。