を使用してファイルのアップロードコンテンツとマルチパートHTTPフォームデータの解析multipart/form-dataファイルアップロードのソリューションの多くはそこにありますが、私はScalaのための自立ものを見つけることができませんでした。はScalaの
PLAY2は、フレームワークの一部としてこの機能を有しており、また、マルチパートフォームデータをサポートスプレー。残念ながら、これらは両方とも、残りのツールセットにかなり統合されているようです(私はここで間違っているかもしれません)。
私のサーバーは、(現在はマルチパートフォームデータをサポートしていません)Finagleを使用して開発されてきた、そして可能ならば、私は自立のlibを使用するか、またはソリューション「自分のロール」したいと思います。
これは、典型的なマルチパート/フォームデータメッセージである:この例では
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value1"
First parameter content
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="value2"
Second parameter content
--*****org.apache.cordova.formBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg"
Content-Type: image/jpeg
$%^&#$%^%#$
--*****org.apache.cordova.formBoundary--
、*****org.apache.cordova.formBoundary
フォーム境界であるので、マルチパートアップロード2つのテキスト・パラメータと一つの画像が含まれている(私は用の画像データを連結しました明快さ)。
私よりもScalaをよく知っている人が、このコンテンツの解析にどのようにアプローチすればいいのか分かりませんが、とても感謝しています。で開始する
は、私はすぐにやって3でコンテンツを分割するだろうと思った:
data.split("\\Q--*****org.apache.cordova.formBoundary\\E") foreach println
をしかし、実行が著しく遅くなる(アップデート - これは時間をウォームアップによるものでした)。部品を分割する効率的な方法はありますか?私の戦略は、コンテンツを部分に分割し、部分を部分に分割することです。これは虚偽のアプローチですか?私は、同様の問題がステートマシンで解決されるのを見たことがありますか?優れた機能的アプローチとは何ですか?私は問題を解決しようとしている間、Scalaへの適切なアプローチを学ぼうとしています。
更新:
私は本当にこの問題を解決するには、行またはスカラ座で2だろうと思いました。誰かがこの問題を滑らかな解決策で見つけた場合は、時間をかけて書き留めてください。私の理解から、一つは、パターンマッチングを使用して、このメッセージを解析コンビネータを解析し、抽出または単純に文字列を分割することができます。私が働いているプロジェクトは、自然言語構文解析の多くが含まれて私は、この種の問題を解決するための最良の方法を見つけようとしている、と私は自分のカスタム解析ツールを記述する必要があります。私はScalaをよく理解していますが、何も専門家の助言に勝るものはありません。
問題を解決することだけではなく、このタイプの問題を解決するための最良の(そしてうまくいえば最も単純な)可能な方法を見つけることです。
ここでプレーコードを見つけることができます。https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/ mvc/ContentTypes.scalaそれは合理的に理解できるようです –
ありがとう@Paul。私は、プレイコードを見て、リンクのおかげで。私はそれのほとんどを理解していますが、それは私がやろうとしていることに対してちょっと複雑です。上記の3つのデータパケットを分割して各パケットのコンテンツにアクセスする最も簡単な方法を探しています。正規表現に基づくネストされた分割のいくつかの並べ替えは、トリックを行うことがありますか? – Jack
私はこの質問をretitlingすることをお勧めします - 私はしばらくの間アップロードと物事をファイルに固有のものとして無視してきましたが、それは解析に関する一般的な質問のようです。私はこれを示すために再タグ付けしましたが、パーサを書くことに関する明確なタイトルはおそらくもっと多くの回答を引き付けるでしょう。 – Submonoid