2

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

控えめに言っても、これは恐ろしく不格好に思えます (あえてプロトコルの欠陥と言えますか?)。私の特定のユースケースには、私が使用する境界を非常によく含む可能性のあるデータが含まれているため (何を選択しても、データは一種のダンプです)、アップロードするファイルが問題を起こさないことを 100% 確認する必要があります。実際の衝突の可能性が 10 億分の 1 であったとしても、数値をランダムに選択することは私にはまったく受け入れられません。ターゲット スクリプトが何らかのエラーを検出した場合に、ランダムに選択された別の境界で再試行することも、私は好きではありません。

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

または、境界が形式にすぎないようにするために渡すことができるサイズパラメータのようなものはありますか?

私は何が欠けていますか?リモート API を変更することはできないため、Base64 でエンコードしたり、ある種のエスケープ文字を追加したりすることはできません。

4

4 に答える 4

2

個人的には、データをスキャンして境界を探すよりも高速な方法を知りません。ほとんどのアプリケーションでは、これがその方法だと思います (Firefox のソースをダウンロードして見てみてください)。

  1. 作成されたランダムな境界 (理想的には、データ内で発生する可能性は低いです。例: --------saDad8g3--------)
  2. その中に含まれる境界を検索したデータ
  3. 境界が見つかった場合は、1 に戻ります。

私の推測では、境界が見つかった場合、コードは作成されたランダムな境界を変更し、再度スキャンします。

手順 3 を次のように変更することで、おそらくこれを最適化できます。

アプリケーションに非常に高いパフォーマンス要件があり、アップロードの境界をスキャンすることが問題であると本当に考えている場合は、次の代替手段をお勧めします。

  1. 作成されたランダムな境界 (理想的には、データ内で発生する可能性は低い)
  2. データの発生をチェックせずに (衝突の可能性は非常に低いと仮定して)、アップロードしてください。
  3. サーバー エラーが発生した場合は、手順 1 に戻り、新しい境界が作成されます。これは、データに含まれていないことを願っており、もう一度やり直してください。

ただし、サーバーからの 400 エラーがアップロード境界の障害であるかどうかを判断するよりも、アップロード前にデータをスキャンする方がよいと思います。

于 2010-11-29T09:06:39.777 に答える
0

一意性を確保するには、次のコードで使用されているように、境界文字列に UUID/GUID を使用します。ファイル/

オンライン GUID ジェネレーター: https://guidgenerator.com/online-guid-generator.aspx

于 2015-07-14T10:45:51.670 に答える
-1

「何が足りないの?」

常識?:P

ここに方法があります-アップロードするファイルを読み込んでから、ランダムなバイトを変更すると出来上がりです。アップロードするファイルで繰り返されない境界を自分で作成しました。でも、本当に、それは無意味です。たとえば、10k の境界を設定すると、バイトの衝突が発生するまで人類が消滅する可能性がはるかに高くなる程度まで、衝突の可能性が低くなります。

于 2010-11-28T01:27:31.427 に答える