Googleのクラウドストレージ(Googleの公開アプリからのログファイル)からファイルをダウンロードしようとしています。Googleのクラウドストレージから常に不正なハッシュをダウンロードする
私のコードは、この
Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "my-service-account-credential.json", EnvironmentVariableTarget.Process);
StorageClient storageClient = StorageClient.Create();
var bucketName = "mybucketname";
var buckets = storageClient.GetBucket(bucketName);
var objects = storageClient.ListObjects(bucketName).ToList();
foreach (var o in objects)
{
try
{
Directory.CreateDirectory(Path.GetDirectoryName(o.Name));
using (var fs = File.Open(o.Name, FileMode.OpenOrCreate))
{
await storageClient.DownloadObjectAsync(bucketName, o.Name, fs);
}
}
catch (Exception e)
{
if (e.Message.StartsWith("Incorrect hash"))
{
continue;
}
throw;
}
}
コードが実際に正常に動作するようです(実際のダウンロードしたファイルの内容を見てから判断すると、それはCSVファイルである)のように見えます。しかし、あなたが見ることができるように、私がダウンロードしたすべてのファイルがハッシュが間違っているという例外をスローするので、厄介なtry catch/hackを実装しました。私は、クライアントライブラリは、バケットのハッシュとダウンロードされたコンテンツのハッシュを比較し、これらは例外の結果、同一ではないと仮定しています。
例外は次のとおりです。
System.IO.IOException: Incorrect hash: expected 'DXpVGw==' (base64), was '2RMrcw==' (base64)
at Google.Cloud.Storage.V1.StorageClientImpl.<DownloadObjectAsyncImpl>d__48.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at MyClass.GoogleBucket.Functions.<DownloadGoogleBucketLogs>d__1.MoveNext() in mycode.cs:line 51
だから私の質問は、あなたがこの例外を得ることなく、明確一つは、私がやっていることを行うことになっていない、オブジェクトをダウンロードします方法です。
完全な例外の詳細を含めることはできますか? – mjwills
例外の詳細が追加されました。私は別の時間を試して、多くのファイルは例外が常に発生することに注意してください。 – sjkp
クライアントライブラリのバグかどうか疑問に思います。 GCSのメタデータに基づいて、オブジェクトのコンテンツタイプとコンテンツエンコーディングを教えてください。 –