2010-11-28 15 views
2

現在、私は現在、HTTPファイルのアップロード(外部APIにいくつかのファイルをアップロードするためにHttpWebRequestを使用するというコンテキストで)を研究していますが、一般には数十個のダッシュが境界として使用されています。ブラウザは通常、ランダムに選択された16進数をダッシュ​​に追加するように見えます。HTTPファイルのアップロードの境界線の選択

これは、私が議定書の欠陥を言うのを敢えて言えば、あまりにも控えめだと思われます。私の特定の用途には、私が使用する境界線を非常によく含むデータが含まれているので(私が選んだものであっても、データは一種のダンプです)、アップロードするファイルが破損しないことを100%保証する必要があります。実際の衝突の可能性が10億分の1であっても、無作為に数字を選ぶことは、私には受け入れられません。ターゲットスクリプトが何らかのエラーを検出した場合、ランダムに選択された別の境界で再試行することは、私が好きなことではありません。

私の選択した境界が存在しないかどうかを調べるために、ファイル全体(多くの場合、数メガバイト)をスキャンするのを避ける唯一の方法はありますか?私はアップロードで多くの異なるリクエストを実行する必要があるので、I/Oペナルティを避けるために、ファイル全体をスキャンしないようにしたいと考えています。

また、境界がフォーマルよりも少し大きくなるように、いくつかの種類のサイズパラメータがありますか?

私には何が欠けていますか?リモートAPIの変更はオプションではないため、Base64でのエンコードやエスケープ文字の追加はできません。

答えて

-1

「私は何が欠けていますか?」

常識? :P

アップロードするファイルを読み込んだ後、ランダムなバイトを修正して、アップロードするファイル内で再発しない境界を作りました。しかし、実際それは無意味です。たとえば、10kの境界を置くと、バイトクラッシュが発生するまで人間の種類が消滅する可能性が非常に高くなる程度の衝突の可能性が薄れます。

+0

私は常識を持っていると言うか、最初はこの境界力学に疑問を呈していません。 ;)明らかに、ファイル化された境界は、それ自体はかなり無意味な事です。 – Stigma

+0

OPが言っているように、あなたはこれについて心配する必要はありません。たとえば、ファイルを読み込んでMD5ハッシュを生成し、それを境界として使用することができます。また、http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.htmlを参照してください。これは、WebClientを使用してマルチパートアップロードを行う方法を示しています。アップロードストリームのフォーマットに関する詳細の大部分はあなたのために処理されます。 – feroze

+0

@feroze - 境界としてMD5ハッシュを使用するメリットはありません...データのハッシュであるという理由だけでは、データ(OPのポイント)には発生しないということではありません。 – userx

2

境界のデータをスキャンするよりも速く方法を個人的に知りません。大多数のアプリケーションでは、これが彼らのやり方であると私は信じています(Firefoxのソースをダウンロードして見てみましょうか?)。

  1. (データで発生する理想的にそうではない、例えば-------- -------- saDad8g3)作成したランダム境界
  2. データはそれ
  3. に含まれている境界で検索境界が見つかった場合
  4. 、私の推測では、境界が発見された場合、コードが作成されたランダムな境界線を変更して、もう一度スキャンしていることである1

に戻ります。

手順3を次のように変更して、これを最適化できます。境界が見つかった場合は、データの次のバイトではない境界の末尾にバイトを追加し、データの検索を続行します。

あなたはは、あなたのアプリケーションは、あなたの境界のためのあなたのアップロードをスキャンする問題であり、私はこの代替をお勧めしますこのような高い性能要件があることは本当に思われる場合:(再び、理想的ではない可能性が作成さ

  1. ランダムな境界線を
  2. データが発生していないことを確認して(衝突確率が非常に低いと仮定して)、アップロードしないでください。
  3. サーバーエラーが発生した場合は、ステップ1に戻り、データ内のALSOでない新しい境界を作成し直します。

アップロードの前にデータをスキャンする方が、サーバーからの400エラーがアップロード境界のフォルトかどうかを判断するよりも優れていると思います。

0

ランダム英数字の境界のためにすべての70 charactersを使用している場合1GBのデータは、衝突の可能性は10億分の1ではなく、10117の1分の​​1になります。あなたは、流星ストライキのために、次のyoctosecondであなたの左足の足指を失うより多くのチャンスを持っています。それは私が恐れるよりもあなたに自信を与えないなら、何もしないだろう:)。事実上同じ質問hereに私の答えをお読みください。

関連する問題