与 Google Drive API 的集成能否处理自定义 MIMEType?

Can an integration with Google Drive API handle custom MIMETypes?

我一直在看 Google 驱动 API https://developers.google.com/drive/api/v3/enable-sdk 很好奇我是否可以将它用作自定义 Web 应用程序文件的云存储。 MIMETypes 在标准 MIMETypes 时有意义,但我无法弄清楚非标准 MIMETypes 会发生什么,它只是未知文件类型 (application/octet-stream) 还是其他?

我还注意到,在关于与云端硬盘集成的部分中 UI,您可以指定与您的应用相关联的 MIMEType(或者只是应用可以实际打开并与之交互的文件类型)和 Google Drive 将建议可以使用该应用程序打开此文件类型,但这不适用于自定义 MIMETypes 吗?

我无法使用它进行测试,因为我需要我的服务器设置,目前只是了解我的选项,以及是否需要将我的自定义文件交换为 PDF 文件: \

附加上下文 例如,假设我有一个应用程序启用了 Google Drive API 并且想使用 Drive UI以及。我正在阅读他们的文档以了解支持的格式类型,有时通过他们的文件上传 API 调用发送自定义 application/CUSTOM_TYPE MIMETypes,如:

 POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media
 Content-Type=application/CUSTOM_TYPE
 ...

假设它不是 Google Drive 支持的标准格式,我读到有时自定义 MIMETypes 最终会更改为 application/octet-stream,如果您设置 Drive UI 让 google 识别您的应用想要打开 application/CUSTOM_TYPE 而不是 application/octet-stream

我不确定如何解决这个问题。有一些选项可以将这种自定义格式转换为 Google 支持的格式,但是说该应用程序需要非常具体的数据,因此能够打开标准格式(如 pdf)并不是很有帮助,因为它可能不会是应用程序正在寻找的数据类型,因此自定义类型可以解决该问题...如果它确实适用于 Google 驱动器。

我了解到您想开发一个使用自定义 MIME 类型的网络应用程序,但您不确定要使用哪些类型。如果我对问题的理解是正确的,那么您不需要指定自定义 MIME 类型。如 Drive UI Integration, you can only choose between «*standard media types or Google Workspace MIME types*» 中所写。

作为一般规则,MIME 类型用作应如何显示和处理文件的建议。如果使用一种允许的 MIME 类型会在您的应用程序中引发错误行为,请使用无效的类型以查看是否有帮助。否则,请使用上面链接中最接近的匹配项。请不要犹豫,问我任何其他问题。

深入研究后,我意识到 Google Drive UI 确实允许自定义 mimeType。一个警告是我只知道这肯定适用于基于 xmljson.

的自定义 mimeTypes

我将描述应用程序如何 uses/transfers 使用我们自己的存储自定义文件,然后我如何让它与 Google 驱动器和驱动器 UI 一起工作。

在应用程序中使用自定义文件。要围绕 app/database 传输数据,文件的格式为 jsonxml,但 mimeType 的格式为 application/custom+xmlapplication/custom+json。这些文件还有一个内部使用的自定义 fileType,当我们在文件中移动时,当 POST 将其发送到各种端点时,它是请求中 mimeType 的一部分。这看起来像 application/custom+xml; fileType=subCustomType。也因为这在技术上只是基于 xmljson mimeType 也可能只是 text/xmlapplication/json.

正在获取上传到 Google Drive 的自定义文件。 请注意,该应用程序使用多种方式将文件发送到 google 驱动器,无论是使用库还是使用访问令牌向 REST 端点发送请求,我不会关注这方面,只关注文件的细节本身。

  1. 由于文件基于 xml/json,因此文件内容被转换为 text/xmlapplication/json 类型的 blob。文件 reader 用于将其读取为二进制字符串以用于分段上传。
  2. 在我的实验中,application/custom+xml; fileType=subCustomType 形式的 mimeType 被截断为 application/custom_xml,因此为了仍然将该信息与文件相关联,我在 google 文件元数据来指定它是什么自定义文件类型。请注意,如果这是特定于应用程序且对应用程序私有的数据,则可以将此元数据存储在 appProperties 中。所以 JSON 格式的文件元数据最终看起来像这样: var metadata = {"name": file_.getName() + '.custom' , 'mimeType': 'application/customFormat+xml', "properties": {'customInternalFileType' : 'subScript'}} 请注意,这是 JSON 字符串化并与文件内容一起添加到分段上传中。
  3. 文件扩展名未在内部使用,但稍后将在配置 Drive UI 集成时使用,因为具有自定义文件扩展名有助于识别 Google 此应用需要哪些文件打开。 请求完成后,文件应位于具有特定名称、扩展名等的驱动器中,并且应在其中存储内容。

配置 Google 驱动器 UI 既然我们有自定义的 mimeType 和文件扩展名,我们很感兴趣,我们可以设置 UI一体化。请注意,这不会给出有用的错误,因此我将指出我在尝试保存更改时学到的知识。但这里是一张屏幕截图,其中包含有关 'open URL' 和自定义 mimeTypes 和文件扩展名的正确信息。 (请注意,我没有嵌入图像的能力,所以这里用 link 代替)。 Google Drive UI Integration Screenshot

注意事项:

  1. Open URL(和 New URL,如果您还想配置它)需要是有效的域并且不能是本地主机,相信我,我试过了,它不起作用。
  2. 对于文件扩展名,您需要采用“/”的格式,有一侧而不是另一侧似乎不起作用。
  3. 对于文件扩展名,您不需要放入“.”。抛出错误,仅名称就足够了。
  4. 屏幕截图中未显示,但您至少需要一个特定像素 x 像素值的应用程序图标,通常在它不起作用时更容易诊断,如果不是该图片将不会被接受尺寸正确。

一旦完成并给定时间让 google 自行更新,您应该能够将鼠标悬停在应用程序的特定文件上,并且应该建议您的应用程序打开它!