我无法将文件上传到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编码时,是否可以尝试将任何请求内容类型自动转换为二进制?
谢谢。
答案 0 :(得分:0)
我找到了解决方案。 StreamWriter RestReqstreamWriter =新的StreamWriter(request.GetRequestStream())
我使用Stream类代替了StreamWriter。它具有Write函数,其中byte []作为参数。
对我有用。