json - Google Storage JSON API 使用 .Net 核心上传文件
问题描述
我无法将文件上传到 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的二进制文件上传,有什么办法吗?我这里的代码超时。
提前致谢。
解决方案
我找到了解决方案。StreamWriter RestReqstreamWriter = new StreamWriter(request.GetRequestStream())
我使用 Stream 类而不是 StreamWriter。它具有以 byte[] 为参数的写入功能。
它对我有用。
推荐阅读
- typescript - 如何在函数调用中指定对象类型
- mysql - 在 MySQL 中的值之间使用 in 查找行
- jenkins - 当詹金斯管道中的语句编译失败时
- php - 如何在php中将输出打印到两个不同的终端?
- android - 在android studio中解析Json
- javascript - 在 JSXGraph 中使滑翔机元素可拖动
- c# - 尝试在 WPF 中打开新窗口时出错
- swagger - 如何使用 Swagger UI 打开 openapi 文档?
- flutter - 如何删除“确保 dartdoc 在包的源文件上成功运行。”
- javascript - React 中的输入值问题(一个组件正在将密码类型的受控输入更改为不受控制。)