【发布时间】:2018-10-04 11:24:04
【问题描述】:
我正在尝试使用 C# 将图像文件上传到照片库。
使用的范围: https://www.googleapis.com/auth/photoslibraryhttps://www.googleapis.com/auth/photoslibrary.appendonly
我正在使用以下方法生成 uploadToken:
FileStream fS = new FileStream(fullPath, FileMode.Open, FileAccess.Read);
byte[] b = new byte[fS.Length];
fS.Read(b, 0, (int)fS.Length);
fS.Close();
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://photoslibrary.googleapis.com/v1/uploads");
httpWebRequest.ContentType = "application/octet-stream";
httpWebRequest.Headers.Add("Authorization:" + "Bearer " + auth_Token);
httpWebRequest.Headers.Add("X-Goog-Upload-File-Name:" + imageName);
httpWebRequest.Headers.Add("X-Goog-Upload-Protocol:" + "raw");
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(b);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
我在这里成功获取了uploadToken。在此之后,我继续创建 mediaItem,如下所示:
httpWebRequest = (HttpWebRequest)WebRequest.Create("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Headers.Add("Authorization:" + "Bearer " + auth_Token);
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string albumID = "someid";
string itemDesc = "somedesc";
string jsonString = "{\"albumId\": \"" + albumID + "\",\"newMediaItems\": [{ \"description\": \"" + itemDesc + "\", \"simpleMediaItem\": { \"uploadToken\": \"" + uploadToken + "\" }}]}";
streamWriter.Write(jsonString);
streamWriter.Flush();
streamWriter.Close();
}
httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
现在我得到的回应是:
状态“:{ “代码”:3, "message": "NOT_IMAGE: 尝试创建此媒体项目时出错。" }
我用谷歌搜索了很多,但找不到任何解决这个问题的方法或任何使用谷歌照片库 API 的 mediaUpload 代码块。
请建议我哪里做错了。
-以错误的方式读取/写入文件字节?
-使用Json字符串,写错了?
请帮助我。谢谢。
【问题讨论】:
-
uploadToken 的值是多少? (另外,我有完全相同的问题,除了我使用的是 react-native)
-
我知道有点晚了,但为了让生活更轻松,我为 Google Photos API 创建了一个 .NET 库(nuget 包),它为您处理所有这些...github.com/f2calv/CasCap.Apis.GooglePhotos跨度>
标签: c# google-photos google-photos-api