2017-08-06 28 views
0

私はGolangを使用してGoogleのクラウドストレージにファイルをアップロードするための非常に単純なコードを持っています。不正なアップロードを防ぐにはどうすればよいですか?

func upload(object *storage.ObjectHandle, b []byte) error { 
    w := object.NewWriter(context.Background()) 

    if _, err = w.Write(b); err != nil { 
     return err 
    } 
    return w.Close() 
} 

私は何も問題なくファイルをアップロードしましたが、昨日、ファイルの1つが破損していることに気付きました。私は、その内容のMD5ハッシュに基づいてファイルの名前を指定すると、アップロード中にファイルが破損していることをかなり確信しています。私はw.Close()を呼び出すときにGoogleのクラウドストレージがエラーを返してきたはずですが、それはなかったと信じています。転送が中断された/破損したときにアップロードが常に失敗することを確認する最善の方法は何ですか?

答えて

1

あなたがバイトをアップロードする前と後のあなたは以下のチェックを試みることができる:

  • 店LEN(b)のバイトの
  • ストアバイトのハッシュ

は、これらの両方のことを確認しSHA256後でクラウドストレージから直接読み込んだ場合も同じです。これはもちろんパフォーマンスに影響する可能性がありますが、GCSに取り入れた内容を確実に引き出すことができます。あなたがが破損を見ることができる唯一の場所ではありません

- クライアントが送信を停止したり、サーバーへの不正なデータを送信した場合、これはそれを検出しません。もしそうなら、アップロードの前に他の方法で整合性をチェックするのが最善の策かもしれません。あなたのファイルが既知のタイプのものである場合は、例えば、実際には有効なjpgファイルであることを確認することによって、完全性をチェックすることもできます。

それは再現しようと腐敗がGCSがエラーを返され、代わりに黙ってそれに与えられたデータが破損している必要があることを、あなたの仮定を検証するために最初に発生した場所を正確に見つけることによって最良のかもしれません。

関連する問題