マルチパートフィールド/ファイルデータを個別に解析する方法は?


9

マルチパートフォームを2回解析する必要があります。1回は入力フィールドを取得し、後でファイルのアップロードを処理します。

私は私のノードアプリ内で懸念の適切な分離を維持しようとしています:

  • コントローラーは、入力フィールドの処理を担当します。
  • モデルは、ファイルのアップロードロジックを担当します。

新しいインスタンスを作成するためにフィールドデータをモデルに渡す必要があるため、ファイルのアップロードを開始する前にフィールドデータを利用できるようする必要があります。

現在、すべてform.parse()または同等の関数がフィールドとファイルの両方を一緒に解析しています。例:req.pipe(busboy)ファイルとフィールドの両方を一緒に処理します。

私はnode-multiparty、手ごわい、busboy、multerなどのモジュールをチェックしました。これに対する解決策は誰にもないようです。

私が達成したいものの例はここにあります:https : //stackoverflow.com/questions/22336177/node-js-busboy-parse-fields-and-files-seperatly

これは可能ですか?


2
待ってください...それで、モデルにロジックと制御を担当させるつもりですか?
マシューマークミラー

良いキャッチ、通常そのアーキテクチャは懸念を混同するのが悪いです。これは2年前だったので、この質問をしたときに解決した問題を正確には覚えていませんが、保存ロジックをMongooseスキーマオブジェクトの一部にしたかったことを覚えています。モデルにマングースメソッドを使用することで、アプリのどこからでも簡単に保存できました。振り返ってみると、saveメソッドがモデルメソッドになるほど一般的ではないと思います。おそらく、それを個別のサービスメソッドとして保持する必要があります。mongoosejs.com/docs/guide.html
Scott

1
LOL私はこれが何歳かわからなかった...それはどういうわけか私の「答える必要がある」キューの一番上に流れました。そうですね、オブジェクトが2次元でデータを転送している可能性がある場合は、永続化操作を永続化されるデータとは別に維持することが特に適切だと思います。コントローラーの外で物事を台無しにし、永続化することを簡単にします。
マシューマークミラー

@スコット「これは2年前だったので、この質問をしているときに私が解決していた問題を正確に覚えていません」 -まったく答えられそうにないので、この質問を削除することを検討してください...
ティモシートラックル2017年

回答:


1

この質問に答えたい:

コンテンツの前にマルチパートフィールドヘッダーを読み取ることは可能ですか?

私が見たとき、マルチパートRFC、私はこの例を参照してください。

From:  Nathaniel Borenstein <nsb@bellcore.com> 
To: Ned Freed <ned@innosoft.com> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

ヘッダーContent-Typeはボディパーツの間にあります。したがって、私は結論として、すべての本文の前にすべてのヘッダーを置くことはできません。

今あなたの質問に:

マルチパートフォームを2回解析する必要があります。1回は入力フィールドを取得し、後でファイルのアップロードを処理します。

それはあなたが「解析」によって何を意味するかによる。HTTPメッセージを読み取って、いつ終了するかを知るには、いくつかの解析が必要です。最後は最後に追加--があります:

--boundary42--

2回解析するためのアイデア:

  • 私は結論として、ソケットから回答全体をコピーし、後で解析することができるはずです。
  • すべてのファイルのすべてのヘッダーではなく、ファイルの本文の前にファイルのヘッダーを読み取ることができます。

これは可能ですか?

はい、それが可能である場合があります(ファイルがアップロードする最後のものである場合)。あなたが何をしたいのか正確にはわからないので、あなたが何を必要としているのかが普遍的に可能かどうかはわかりません。

これでわかりやすくなったと思います。これが完全な回答ではない場合、またはこれが嫌いな場合は、質問に回答しようとする他の人にとって貴重なフィードバックになる可能性があるため、理由を教えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.