Strapi如何在与“文件”不同的字段中使用上传服务

时间:2019-11-01 11:20:44

标签: multer strapi

用于上传图片的方库(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”。

另一种方法: 因此,我认为另一种方法是创建自定义上传提供程序。但是,使用标准上传过程时,字段名称也必须是“文件”。

0 个答案:

没有答案