我正在尝试使用驱动器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元数据)不能有内容类型作为可选哈希。
生成的多部分/表单数据资源中与非文件字段相对应的部分不得指定内容类型标头。
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-表单数据
我们可以看到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文件。但在这种情况下,不希望将元数据指定为文件。
有更好的方法吗?我不能用任何宝石。
1条答案
按热度按时间hgb9j2n61#
您可以使用此gem连接到google drive。
https://github.com/gimite/google-drive-ruby