繁体   English   中英

在 Ruby 中使用 Google Drive API

[英]Use Google Drive API in Ruby

我正在尝试使用 Drive API 上传文件。
使用这个: https : //developers.google.com/drive/api/v3/manage-uploads

我的代码

这是我的代码:

url = URI.parse("https://www.googleapis.com/upload/drive/v3/files")
url.query = "uploadType=multipart"

req = Net::HTTP::Post.new(url.path)
request_header.each{ |key, value| req[key.to_s] = value }

filedata = [ "file", file, { filename: "Untitle.png", content_type: "image/png" } ] 
metadata = [ "metadata", '{"name": "test.png"}', { filaneme: "", content_type: "application/json" } ]

data = [filedata, metadata]

req.set_form(data, "multipart/form-data")  
http.request(req)

它工作正常。 图像(Untitle.png)作为“test.png”上传到云端硬盘。

问题

但是,HTML5 官方规定非文件字段(id 元数据)不得将 content_type 作为可选哈希。

与非文件字段对应的生成的 multipart/form-data 资源部分不得指定 Content-Type 标头。

https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data

我们可以看到 ruby​​ 中的 set_form(encode_multipart_form_data) 遵循这个规则。 https://apidock.com/ruby/v2_5_5/Net/HTTPGenericRequest/encode_multipart_form_data

由于元数据是非文件字段并且文件名不存在,我的代码应该是这样的:

filedata = [ "file", file, { filename: "Untitle.png", content_type: "image/png" } ] 
metadata = [ "metadata", '{"name": "test.png"}' ]
data = [filedata, metadata]

req.set_form(data, "multipart/form-data")  
http.request(req)

在这里,我减少了内容类型选项。
但是,此代码无法完美运行。 文件(Untitle.png)已上传,但文件名是“Untitle.png”,而不是元数据中指定的“test.png”。

我知道我可以像这样将元数据设置为 json 文件。 但在这种情况下不想将元数据指定为文件。

有一个更好的方法吗? 我不能使用任何宝石。

您可以使用此 gem 连接到谷歌驱动器。

https://github.com/gimite/google-drive-ruby

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM