[英]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 连接到谷歌驱动器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.