当前位置: 首页 > 知识库问答 >
问题:

如何将图像从TinyMCE上传到Apollo GraphQL服务器?

洪高阳
2023-03-14

我已经为KeystoneJS的AdminUI编写了一个自定义字段,它使用了TinyMCE的编辑器。

KeystoneJS在下面运行Apollo GraphQL服务器,并根据CMS模式自动生成变化和查询。TinyMCE具有输入自定义挂钩以上载图像的功能。

我希望能够连接这两个——使用GraphQL将图像从TinyMCE上传到KeystoneJS的服务器

例如,在我的设置中,我在CMS中有一个Image字段。KeystoneJS有一个GraphQL突变,允许我上传图像

createImage(data: ImageCreateInput): Image

其中imageCreateInput

type ImageCreateInput {file: Upload}

本教程解释了如何将图像从Apollo客户端上传到Apollo服务器(KeystoneJS正在运行)。

const UPLOAD_MUTATION = gql`
  mutation submit($file: Upload!) {
    submitAFile(file: $file) {
      filename
      mimetype
      filesize
    }
  }
`;

 return (
    <form>
      <Mutation mutation={UPLOAD_MUTATION} update={mutationComplete}>
        {mutation => (
          <input
            type="file"
            onChange={e => {
              const [file] = e.target.files;
              mutation({
                variables: {
                  file
                }
              });
            }}
          />
        )}
      </Mutation>
    </form>
  );

对于如何将其集成到TinyMCE中,我有点困惑,特别是因为该示例基于使用表单,TinyMCE将以Base64编码的数据发送给我。

TinyMCE为我提供了指定自定义上载处理程序的机会:

tinymce.init({
  selector: 'textarea',  // change this value according to your HTML
  images_upload_handler: function (blobInfo, success, failure) {
    var xhr, formData;

    xhr = new XMLHttpRequest();
    xhr.withCredentials = false;
    xhr.open('POST', 'postAcceptor.php');

    xhr.onload = function() {
      var json;

      if (xhr.status != 200) {
        failure('HTTP Error: ' + xhr.status);
        return;
      }

      json = JSON.parse(xhr.responseText);

      if (!json || typeof json.location != 'string') {
        failure('Invalid JSON: ' + xhr.responseText);
        return;
      }

      success(json.location);
    };

    formData = new FormData();
    formData.append('file', blobInfo.blob(), blobInfo.filename());

    xhr.send(formData);
  }
});

TinyMCE似乎为我提供了一个blob,而据我所知,Apollo客户端需要一个文件名。我是否只使用blobInfo。文件名?有没有更好的方法将TinyMCE图像上传到GraphQL Apollo服务器?

我以前从未用TinyMCE上传过任何图像。

共有1个答案

东郭元魁
2023-03-14

我也从来没有用过这个...但是我会试着用file_picker_callback。

在这个演示中,您可以看到文件[0]-我很确定您可以在这里插入一个带有文件作为参数的上传变异调用。结果(url)传递到cb()(如示例所示)。

也可以按照此答案调整配置

 类似资料:
  • 问题内容: 我想随请求一起发送图像作为参数。我使用下面的代码调用POST请求,但是我不知道如何将图像追加到正文中。 我通过图像选择器获取图像,如下所示: 我的要求如下 我是Swift的新手。我已经通过multipart / form-data看到了这一点,但无法自己实现。我不想将其编码为基本64格式。请帮助我。 问题答案: 我使用以下结构发送图像: 然后在函数中创建如下主体:

  • 问题内容: 如何从iPhone上的图片库以JSON格式将图片上传到服务器?我尝试了以下方法: 问题答案: 如果要以字符串形式上传图像,则必须将图像数据转换为Base64,然后可以使用上述方法: 要转换为base64字符串,请参阅此答案。然后,您可以使用您的代码进行上传。 其他方式 您可以像这样直接上传图片:

  • 问题内容: 我将图片上传到服务器的代码是: 将图像上传到服务器工作正常。.我需要同时将mp3文件和图像上传到服务器。.请帮助 问题答案: 因此,您要在一个HTTP请求中发送多个文件?我从来没有亲自做过,但是根据RFC,只需在发送音频的消息中添加另一个正文,它应该看起来像这样: 确保两个部分的名称不同(取决于服务器软件)。

  • 问题内容: 我需要即时将画布图像数据上传到服务器(数据库),即,我需要创建一个带有input=file的表单,并在没有任何用户交互的情况下发布图像数据。 问题答案: 您不需要文件输入,只需使用Ajax 获取数据并将其发布到服务器即可。 请参阅MDN文档。 但是即使使用,您也无法在IE中获取图像数据。

  • 但我的观点是,我是靠自己学习的,如果没有解释,初学者很难理解,所以我所要求的只是一个解释,对整个过程的详细解释如果有人很难花时间在这个问题上,因为信不信由你,我发现这是到目前为止最难的话题,因为主要原因是没有关于整个过程的教程,也没有对初学者的解释,如果有人现在能解释概念,对明天将要学习的学生来说会更容易。因此,任何人谁可以解释这详细和如何上传过程的工作和一些步骤,以供参考,将非常感谢。 注意:假

  • 问题内容: 我正在尝试从Android设备将文件上传到php服务器。有相同问题的话题,但他使用的是不同的方法。我的Android辅助代码运行正常,并且未显示任何错误消息,但服务器未收到任何文件。这是我的示例代码,我在网上找到了。 和我的PHP服务器端代码如下 Apache正在运行。当我运行服务器时,出现此错误消息。上传文件时出错,请重试!我已经在eclipse中检查了日志数据,我认为是套接字问题,