该系统是一个Flex应用程序,与WCF REST Web服务进行通信。我试图从Flex应用程序上传一个文件到服务器,并且遇到了一些问题,我希望这里有人能够提供帮助。 我使用的FileReference在Flex应用程序浏览和上传文件的定义如下:将文件从Flex上传到WCF REST流问题(如何解码REST WS中的多部分表单文章)
http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the-filereference-class/
我则接收到的文件作为流(显示为System.ServiceModel.Dispatcher.StreamFormatter。 MessageBodyStream在WCF REST Web服务的调试器)(使用WCF 4 REST服务的项目类型)
[WebInvoke(Method = "POST", UriTemplate = "_test/upload")]
public void UploadImage(Stream data)
{
// TODO: just hardcode filename for now
var filepath = HttpContext.Current.Server.MapPath(@"~\_test\testfile.txt");
using (Stream file = File.OpenWrite(filepath))
{
CopyStream(data, file);
}
}
private static void CopyStream(Stream input, Stream output)
{
var buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, len);
}
}
注:从这篇文章中使用CopyStream方法:How do I save a stream to a file in C#?
该文件保存没有任何问题。我遇到的问题是该文件包含的信息比我想要的要多。这里有保存文件的内容(源文件只包含“这是文件的内容”):
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Filename"
testfile.txt
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Filedata"; filename="testfile.txt"
Content-Type: application/octet-stream
THIS IS THE CONTENT OF THE FILE
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2
Content-Disposition: form-data; name="Upload"
Submit Query
------------ae0ae0Ef1ae0Ef1ae0gL6gL6Ij5cH2--
内容看起来完全一样,他们的的Adobe文档中描述: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html
C#中是否有任何工具可以从Stream中获取文件内容?
编辑(3/24 8:15 pm):Flex应用程序发送的是多部分表单POST。如何解码由Stream参数表示的多部分正文数据并去除多部分正文的碎片?
EDIT(3/25上午10时):那些相关的一些堆栈溢出职位:
WCF service to accept a post encoded multipart/form-data
POSTing multipart/form-data to a WCF REST service: the action changes
EDIT(3/25 10:45):发现了一个多解析器工作得很好:
http://antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html
在此先感谢。
你可以通过MS公共API实现这一点,请参阅http://stackoverflow.com/questions/7460088/reading-file-input-from-a-multipart-form-data-post/21689347#21689347 – 2014-02-10 22:46:43