2013-05-10 144 views
0

我需要使用WCF REST上传两个文件。这WCF Restful service file upload with multi-platform support上传单个文件时对我的作品,但是当我尝试像WCF RESTful服务 - 上传两个文件

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

失败。所以问题是:如何将两个参数放入Uri?

由于提前,JP

+0

我不认为你可以同时上传两个文件。你为什么不一个一个地去做。 – I4V 2013-05-10 13:32:24

+0

也许这可以帮助http://www.codeguru.com/csharp/.net/uploading-files-asynchronously-using-asp.net-web-api.htm – oleksii 2013-05-10 13:36:10

+0

你有没有试过只保留1个职位的价值,并让它成为一个字符串被一些分隔符分割,然后在你的fileUpload方法中对数组进行分割和迭代。 – Bearcat9425 2013-05-10 13:38:57

回答

0

答案与上传单个文件linked question交易 - 这是相当简单的,因为该服务将读取整个HTTP请求的身体,将被绑定到流参数。当你处理两个(或多个文件)时,这不起作用 - 你需要一些分隔符才能知道一个文件何时结束,另一个文件何时开始。有几种媒体类型可以处理这个问题(multipart/*是最常见的),但它们在WCF中本地不支持(您可能需要创建一个自定义格式化器来处理它,或者将整个正文作为流并在FileUpload操作中分割文件)。

现在假设您有一种方法可以在请求正文中接收两个文件,我们可以转到您的具体问题。 URI模板功能允许您传递多个参数,但它们不能位于URI路径的相同“部分”中。一种选择是将其在多个部分分成:对于

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

或者使用查询参数:

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

这应该做的工作。另一种方法是,由于您已经必须在输入流上分割文件,因此可以使用允许您在流本身中指定名称的格式。例如,这将是一个另类:

<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) 

有许多人(包括多/ *),并在所有这些,你需要以某种方式解析输入拆解的多个文件。