簡體   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