При загрузке файлов с Google Диска, в частности с расширениями .docx, .do c или .pdf, мы теперь используем свойство "WebContentLink" через API filePicker в соответствии с недавней модификацией в Google Drive API, чтобы получить файл. (Ранее мы использовали свойство файла downloadUrl для загрузки файла через API filePicker).
Однако мы получаем это нежелательное исключение "401 - Несанкционированный доступ " при авторизации запросов на загрузку для API, использующий HttpWebRequest путем передачи заголовка с использованием токена на предъявителя.
Версия API Google Drive - v2
Используется - API выбора файлов для получения данных файла, т. Е. Идентификатор файла, webContentLink, alternateLink
Вот фрагмент кода, в котором мы реализовали логи c
//fileurl - webcontentlink of the file (previously, we used downloadUrl)
//accessToken - client's accessToken
//filepath - location to store the downloaded file
public void downloadGdriveFileThroughWebRequest(string fileurl, string filepath, string accessToken)
{
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(fileurl);
rq.Method = "GET";
rq.PreAuthenticate = true;
rq.Headers.Add("Authorization", "Bearer " + accessToken);
try {
HttpWebResponse resp = (HttpWebResponse)rq.GetResponse();
using (Stream output = File.OpenWrite(filepath))
{
using (Stream s = resp.GetResponseStream())
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = s.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
}
}
catch (WebException ex)
{
using (var stream = ex.Response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
reader.ReadLine();
Console.WriteLine(reader.ReadToEnd());
}
}
}
Если мы не передаем заголовки, мы можем загрузить файл, но не можем прочитать и записать его данные, так что это бесполезно!
Есть ли альтернативное решение для загрузки запрошенного файла Google Диска с помощью запросов API с заголовками HTTP?
ПРИМЕЧАНИЕ. - Вот недавняя модификация API Google Drive и Picker - https://cloud.google.com/blog/products/application-development/upcoming-changes-to-the-google-drive-api-and-google-picker-api и мы уже внесли изменения.