返回

如何在 GraphQL 网站中实现文件上传?

javascript

网站文件上传:利用 Google Cloud Storage 和 GraphQL 实现

问题

在当今数字时代,网站经常需要用户上传图像或文件。但是,默认情况下,GraphQL 不支持文件上传。本文将指导你如何使用 GraphQL-Upload 和 Google Cloud Storage 实现网站文件上传。

解决方法:GraphQL-Upload 和 Google Cloud Storage

GraphQL-Upload

GraphQL-Upload 是一个 GraphQL 库,允许客户端将文件上传到支持 GraphQL 的服务器。它通过提供一个符合 GraphQL 标准的 API 来实现这一点,使客户端可以轻松上传文件。

Google Cloud Storage

Google Cloud Storage 是 Google 提供的云存储服务。它提供了安全且可扩展的方式来存储和检索文件,包括图像。

实现步骤

前端

  1. 安装 apollo-upload-client,它是一个 Apollo 客户端库。
  2. 使用 createUploadLink 创建一个上传链接,并添加 Apollo-Require-Preflight 标头。
  3. 使用 FileInput 组件允许用户选择文件。

后端

  1. 使用 graphql-upload 库来处理文件上传。
  2. 使用 Google Cloud Storage SDK 将文件上传到 Google Cloud Storage。
  3. 使用 GraphQL 查询来检索上传的文件。

示例代码

// 前端
import { FileInput } from "react-file-input";
import { useMutation } from "@apollo/client";
import gql from "graphql-tag";

const UPLOAD_FILE = gql`
  mutation UploadFile($file: Upload!) {
    uploadFile(file: $file) {
      id
      name
      url
    }
  }
`;

// ...

<FileInput onChange={handleFileInputChange} accept="image/*" multiple={false} />
<button onClick={handleFileUpload}>Upload File</button>

// ...

// 后端
const storage = new Storage();
const bucketName = "your-bucket-name";

const uploadFile = (file, filename) => {
  // ...

  return storage.bucket(bucketName).upload(file, options);
};

优势

  • 安全可靠的文件上传
  • 可扩展,适合处理大量文件
  • 易于使用和实施

结论

通过结合 GraphQL-Upload 和 Google Cloud Storage,你可以为你的网站提供安全、可扩展且易于使用的文件上传功能。本文提供了逐步说明和示例代码,帮助你开始使用。

常见问题解答

1. 我可以在多个文件中使用该技术吗?

是的,你可以使用 multiple 属性允许用户一次选择多个文件。

2. 我可以限制允许的文件类型吗?

是的,使用 accept 属性指定允许的文件类型,例如 accept="image/*"

3. 文件大小有限制吗?

这取决于 Google Cloud Storage 的配额和限制。

4. 上传的文件如何保密?

Google Cloud Storage 提供了多种安全功能来保护文件,包括加密和身份验证。

5. 我可以自定义上传文件的文件名吗?

是的,你可以通过指定 filename 参数来自定义文件名。