手把手教你实现WCF上传文件.doc_第1页
手把手教你实现WCF上传文件.doc_第2页
手把手教你实现WCF上传文件.doc_第3页
手把手教你实现WCF上传文件.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

手把手教你实现WCF上传文件在优酷上我想上传一段视频,你有想过会台是怎么实现的吗?这里我就为大家分析一下关于利用WCF上传文件,在WCF没出现之前,我一直使用用WebService来上传文件,我不知道别人为什么要这么做,因为我们的文件服务器和网站后台和网站前台都不在同一个机器,操作人员觉得用FTP传文件太麻烦,我就做一个专门用来上传文件的WebService,把这个WebService部署在文件服务器上,然后在网站后台调用这个WebService,把网站后台页面上传上来的文件转化为字节流传给WebService,然后WebService把这个字节流保存文件到一个只允许静态页面的网站(静态网站可以防止一些脚本木马)。WebService来上传文件存在的问题是效率不高,而且不能传输大数据量的文件,当然你可以用Wse中的MTOM来传输大文件,有了WCF就好多了,通过使用WCF传递Stream对象来传递大数据文件,但有一些限制:只有BasicHttpBinding、NetTcpBinding和NetNamedPipeBinding支持传送流数据。流数据类型必须是可序列化的Stream或MemoryStream。传递时消息体(MessageBody)中不能包含其他数据。TransferMode的限制和MaxReceivedMessageSize的限制等。 下面具体实现:新建一个WCFService,接口文件的代码如下:1. ServiceContract 2. publicinterfaceIUpLoadService 3. 4. OperationContract(Action=UploadFile,IsOneWay=true) 5. voidUploadFile(FileUploadMessagerequest); 6. 7. MessageContract 8. publicclassFileUploadMessage 9. 10. MessageHeader(MustUnderstand=true) 11. publicstringSavePath; 12. MessageHeader(MustUnderstand=true) 13. publicstringFileName; 14. MessageBodyMember(Order=1) 15. publicStreamFileData; 16. 定义FileUploadMessage类的目的是因为第三个限制,要不然文件名和存放路径就没办法传递给WCF了,根据第二个限制,文件数据是用System.IO.Stream来传递的接口方法只有一个,就是WCF上传文件,注意方法参数是FileUploadMessage接口实现类文件的代码如下:17. publicclassUpLoadService:IUpLoadService 18. 19. publicvoidUploadFile(FileUploadMessagerequest) 20. 21. stringuploadFolder=C:kkk; 22. stringsavaPath=request.SavePath; 23. stringdateString=DateTime.Now.ToShortDateString()+; 24. stringfileName=request.FileName; 25. StreamsourceStream=request.FileData; 26. FileStreamtargetStream=null; 27. if(!sourceStream.CanRead) 28. 29. thrownewException(数据流不可读!); 30. 31. if(savaPath=null)savaPath=Photo; 32. if(!savaPath.EndsWith()savaPath+=; 33. 34. uploadFolderuploadFolder=uploadFolder+savaPath+dateString; 35. if(!Directory.Exists(uploadFolder) 36. 37. Directory.CreateDirectory(uploadFolder); 38. 39. stringfilePath=Path.Combine(uploadFolder,fileName); 40. using(targetStream=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None) 41. 42. /readfromtheinputstreamin4Kchunks 43. /andsavetooutputstream 44. constintbufferLen=4096; 45. bytebuffer=newbytebufferLen; 46. intcount=0; 47. while(count=sourceStream.Read(buffer,0,bufferLen)0) 48. 49. targetStream.Write(buffer,0,count); 50. 51. targetStream.Close(); 52. sourceStream.Close(); 53. 54. 55. 实现的功能是到指定目录下按照日期进行目录划分,然后以传过来的文件名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论