Google Storage JSON API Загрузка файла с ядром .Net - PullRequest
0 голосов
/ 31 декабря 2018

У меня проблемы с загрузкой файла в облачное хранилище Google.Это аудиофайл.Если я преобразую содержимое файла в base64, загрузка завершится успешно.Но, с другой стороны, нет ничего, что могло бы преобразовать его обратно в двоичный аудиофайл.Это не происходит автоматически.Если я записываю двоичные байты в поток запроса, он истекает.

Мне нужно быть на .Net core 2.0 и заставить его работать с Unity3D.Следовательно, нельзя использовать клиентскую библиотеку, которая предназначена для более высоких версий .Net.

 string fileName = Path.GetFileName(strAudioFileName);
 HttpWebRequest request = HttpWebRequest)WebRequest.Create("https://www.googleapis.com/upload/storage/v1/b/my-bucket/o?uploadType=media&name=" + fileName );
    request.Method = "POST";
    request.Headers["x-goog-project-id"] = "9999999999";

    byte[] bFileContent = File.ReadAllBytes(strAudioFileName);
    //string strFileContent = Convert.ToBase64String(File.ReadAllBytes(strAudioFileName));// upload works if i use this.
    Debug.Log("File size: Binary Length" + bFileContent.Length);

    request.ContentType = "application/octet-stream";
    request.ContentLength = bFileContent.Length;
    //request.ContentLength =strFileContent.Length; //Length if base64 is used.
    if (m_Token != null)
    {
        request.Headers["Authorization"] = "Bearer " + m_Token;
    }

    StreamWriter RestReqstreamWriter = new StreamWriter(request.GetRequestStream());
    RestReqstreamWriter.Write(File.ReadAllBytes(strAudioFileName));
    RestReqstreamWriter.Flush();
    var httpResponse = (HttpWebResponse)request.GetResponse();

Вопросы: 1. С кодировкой base64, есть ли какой-либо тип содержимого запроса, который я мог бы попробовать, который автоматически преобразуется в двоичный файл?

Есть ли способ сделать это с загрузкой двоичного файла без base64?Мой код здесь истекает.

Заранее спасибо.

1 Ответ

0 голосов
/ 03 января 2019

Я нашел решение для этого.StreamWriter RestReqstreamWriter = new StreamWriter (request.GetRequestStream ())

Вместо StreamWriter я использовал класс Stream.Он имеет функцию записи с байтом [] в качестве параметра.

У меня это сработало.

...