2017-09-20 159 views
0

我正在切換到Google驅動器V3 apis,我無法檢索到文檔的流。exportlink for Google Drive api v3

目標:我想將谷歌驅動器文檔推送到另一個位置,我需要檢索文件流以便使用它將其推送到目標。

我找不到使用Google Drive API V3的方法!

在V2,我用:

downloadUrl = file.ExportLinks[(string)ExportTable[file.MimeType]]; 

然後我可以使用類似:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(downloadUrl)); 

我不覺得在V3的等價物。 我想:

var getfile = _service.Files.Get(file.Id).Execute(); 
var request = _service.Files.Export(file.Id, getfile.MimeType); 
System.IO.Stream stream = request.ExecuteAsStream(); 

和流的內容是:

{ 
"error": { 
"errors": [ 
{ 
"domain": "global", 
"reason": "fileNotExportable", 
"message": "Export only supports Google Docs." 
} ], 
"code": 403, 
"message": "Export only supports Google Docs." 
} 
} 

當然,我們不希望把它從文件下載到本地文件,然後生成一個新的流本地緩存。我們希望完全留在記憶中。

感謝您的幫助

+0

請問,如果你用'它的工作downloadUrl =「HTTPS:/ /drive.google.com/uc?id="+ fileId +「&authuser = 0&export = download'? – Morfinismo

+0

此信息對您有用嗎?https://stackoverflow.com/questions/46302540/google-drive-export-non- google-doc-file/46310449#46310449 – Tanaike

+0

這是c#不是java,我用.Download 取而代之,它返回了一個流,但是文件已經被完全加載到內存中,不好用。 GetRequest getfile = _s ervice.Files.Get(file.Id); var stream = new MemoryStream(); getfile.Download(stream); stream.Position = 0; return stream; – CloudAnywhere

回答

0

你可以看到,在Migrate to Drive v3文檔,它說:

的exportLinks領域已經從文件中刪除。要導出Google 文檔,請改爲使用 files.export 方法。

請檢查該頁面以瞭解v3中的其他更改。

+0

files.export不起作用。看到我的第一篇文章,這是我的嘗試。我希望能夠獲得任何類型的文件流。 – CloudAnywhere

+0

嘗試使用文件導出本機Google文檔。出口,我係統地獲取{ 「錯誤」:{ 「錯誤」:[{ 「域」: 「全局」, 「理」: 「錯誤請求」, 「消息」:「請求轉換不支持「, 」的locationType。「: 」參數「, 」位置「: 」的ConvertTo「 } ], 」代碼「:400, 」消息「: 」不支持所請求的轉換「 } } 這些新的apis正在駕駛我的crasy! – CloudAnywhere

0

您也可以自己創建一個鏈接,如果您登錄爲正確的用戶,或者文件是公開的鏈接:

https://docs.google.com/feeds/download/documents/export/Export?id={{ID}}&exportFormat=pdf