0

WCF REST を使用して 2 つのファイルをアップロードする必要があります。マルチプラットフォームをサポートするこのWCF Restfulサービスファイルのアップロードは、単一のファイルをアップロードするときに機能しますが、次のようなものを試すと

[WebInvoke(Method = "POST", UriTemplate = "FileUpload/{file1Name};{file2Name}")]

それは失敗します。問題は、Uri に 2 つの引数を入れる方法です。

前もってありがとう、JP

4

1 に答える 1

0

リンクされた質問への回答は、単一のファイルのアップロードに関するものです。これは、サービスが HTTP 要求本文全体を読み取り、ストリーム パラメーターにバインドされるため、かなり単純です。2 つ (またはそれ以上) のファイルを扱っている場合、これは機能しません。一方のファイルがいつ終了し、もう一方のファイルがいつ開始するかを知るには、区切り文字が必要です。そのためにこれを処理するいくつかのメディア タイプがあります (multipart/* が最も一般的です)、それらは WCF でネイティブにサポートされていません (それを処理するためにカスタム フォーマッタを作成するか、全体を取る必要があります)。ストリームとしてボディを分割し、FileUpload 操作でファイルを分割します)。

リクエスト本文で 2 つのファイルを受け取る方法があると仮定すると、特定の質問に進むことができます。URI テンプレート機能を使用すると、複数のパラメーターを渡すことができますが、それらを URI パスの同じ「部分」にすることはできません。1 つのオプションは、それらを複数の部分に分割することです。

[WebInvoke(UriTemplate = "FileUpload/{file1Name}/{file2Name}")]

または、クエリ パラメータを使用します。

[WebInvoke(UriTemplate = "FileUpload?file1={file1Name}&file2={file2Name}")]

それは仕事をするはずです。もう 1 つの方法は、入力ストリームでファイルを分割する必要があるため、ストリーム自体で名前を指定できる形式を使用することです。たとえば、これは 1 つの代替手段です。

<length of first file name, in bytes>
<first fileName>
<length of the first file, in bytes>
<bytes corresponding to the first file>
<length of second file name, in bytes>
<second fileName>
<length of the second file, in bytes>
<bytes corresponding to the second file>
00 (or any other value indicating the end of the files)

他にもたくさんあります (multipart/* を含む)。そのすべてで、何らかの方法で入力を解析して複数のファイルを分解する必要があります。

于 2013-05-10T16:18:15.717 に答える