【问题标题】:Add custom headers to upload image添加自定义标题以上传图像
【发布时间】:2019-03-23 05:19:05
【问题描述】:

我目前正在尝试将CKeditor 5 ReactComponent 集成到我的应用中。

我遇到了上传图片功能的问题...我使用的是使用 JWT 身份验证中间件的 Node/Express 后端,因此每个请求都必须有一个 Authorization 标头才能通过。

我想知道以下其中一项是否可行:

  • 向组件添加自定义标头的方法
  • 一种覆盖上传处理程序并调用自定义处理程序的方法,我可以在其中做任何事情

下面是我的代码

<CKEditor
  editor={ClassicEditor}
  data="<p>Add product description here</p>"
  onInit={(editor) => {
    // You can store the "editor" and use when it is needed.
    //console.log('Editor is ready to use!', editor);
  }}
  onChange={(event, editor) => {
    const data = editor.getData();
    this.handleData(data)
  }}
  config={{
    ckfinder: {
      uploadUrl: `${apiUrl}/upload/images/description`,
    },
  }}
/>

谢谢

【问题讨论】:

    标签: ckeditor ckeditor5


    【解决方案1】:

    在属性 onInit 中尝试使用此代码

    onInit={ editor => {
     editor.plugins.get( 'FileRepository' ).createUploadAdapter = function( loader ) {
      return new UploadAdapter( loader );
     };
    }}
    

    之后你必须创建类 UploadAdapter

    class UploadAdapter {
      constructor( loader ) {
        // Save Loader instance to update upload progress.
        this.loader = loader;
      }
    
      upload() {
        const data = new FormData();
        data.append('typeOption', 'upload_image');
        data.append('file', this.loader.file);
    
        return new Promise((resolve, reject) => {
          axios({
            url: `${API}forums`,
            method: 'post',
            data,
            headers: {
              'Authorization': tokenCopyPaste()
            },
            withCredentials: true
          }).then(res => {
            console.log(res)
            var resData = res.data;
            resData.default = resData.url;
            resolve(resData);
          }).catch(error => {
            console.log(error)
            reject(error)
          });
        });
      }
    
      abort() {
        // Reject promise returned from upload() method.
      }
    }
    

    【讨论】:

    • 上面的代码其实是让我使用图片上传但是图片没有上传。 data const 是一个空的 FormData 对象,因此在调用后没有上传图像。
    • 请记住,您必须返回已上传图片的 url。您必须返回此数据 ('uploaded' => TRUE, 'url' => 'example/imgs/example.png')
    • 没有图片上传到服务器,所以无法返回有效的url
    • 抱歉我忘记了这行代码-> data.append('file', this.loader.file);,前面的代码我已经编辑过了
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多