[英]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.