タイトルに非 ASCII 記号が含まれているファイルを Google ドライブにアップロードするにはどうすればよいですか?
現在、このメソッドを使用して Google ドライブへのアップロードを開始しています。しかし、ASCII 以外の文字を含むファイル名を渡すと、JSON 応答で ParseError が返されて失敗します。
public string startUploadSession(string mimeType, long fileLength, string filename)
{
string uri = "https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable" + "&access_token=" + account.accessInfo.access_token;
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.Headers.Add("X-Upload-Content-Type", mimeType);
request.Headers.Add("X-Upload-Content-Length", fileLength.ToString());
// Here we're providing file metadata
File file = new File();
file.title = filename;
string requestBody = toJsonString(file);
request.ContentLength = requestBody.Length;
System.IO.Stream requestStream = request.GetRequestStream();
requestStream.Write(requestBody.ToByteArray(), 0, requestBody.Length);
requestStream.Close();
try
{
var response = request.GetResponse();
var reader = new System.IO.StreamReader(response.GetResponseStream());
var responseBody = reader.ReadToEnd();
return response.Headers["Location"];
}
catch (WebException ex)
{
System.IO.StreamReader reader = new System.IO.StreamReader(ex.Response.GetResponseStream());
string error = reader.ReadToEnd();
Logger.Error(error, "Getting upload uri");
return null;
}
}
わかった。これは私のバグです。コードの修正部分:
System.IO.Stream requestStream = request.GetRequestStream();
byte[] utf8Bytes = requestBody.ToByteArray();
requestStream.Write(utf8Bytes, 0, utf8Bytes.Count());
requestStream.Close();