wcf服务器上传文件大小限制,手把手教你实现WCF上传文件

在优酷上我想上传一段视频,你有想过会台是怎么实现的吗?这里我就为大家分析一下关于利用WCF上传文件,在WCF没出现之前,我一直使用用WebService来上传文件,我不知道别人为什么要这么做,因为我们的文件服务器和网站后台和网站前台都不在同一个机器,操作人员觉得用FTP传文件太麻烦,我就做一个专门用来上传文件的WebService,把这个WebService部署在文件服务器上,然后在网站后台调用这个WebService,把网站后台页面上传上来的文件转化为字节流传给WebService,然后WebService把这个字节流保存文件到一个只允许静态页面的网站(静态网站可以防止一些脚本木马)。

下面具体实现:新建一个WCFService,接口文件的代码如下:[ServiceContract]

publicinterfaceIUpLoadService

{

[OperationContract(Action="UploadFile",IsOneWay=true)]

voidUploadFile(FileUploadMessagerequest);

}

[MessageContract]

publicclassFileUploadMessage

{

[MessageHeader(MustUnderstand=true)]

publicstringSavePath;

[MessageHeader(MustUnderstand=true)]

publicstringFileName;

[MessageBodyMember(Order=1)]

publicStreamFileData;

}

定义FileUploadMessage类的目的是因为第三个限制,要不然文件名和存放路径就没办法传递给WCF了,根据第二个限制,文件数据是用System.IO.Stream来传递的接口方法只有一个,就是WCF上传文件,注意方法参数是FileUploadMessage接口实现类文件的代码如下:publicclassUpLoadService:IUpLoadService

{

publicvoidUploadFile(FileUploadMessagerequest)

{

stringuploadFolder=@"C:\kkk\";

stringsavaPath=request.SavePath;

stringdateString=DateTime.Now.ToShortDateString()+@"\";

stringfileName=request.FileName;

StreamsourceStream=request.FileData;

FileStreamtargetStream=null;

if(!sourceStream.CanRead)

{

thrownewException("数据流不可读!");

}

if(savaPath==null)savaPath=@"Photo\";

if(!savaPath.EndsWith("\\"))savaPath+="\\";

uploadFolderuploadFolder=uploadFolder+savaPath+dateString;

if(!Directory.Exists(uploadFolder))

{

Directory.CreateDirectory(uploadFolder);

}

stringfilePath=Path.Combine(uploadFolder,fileName);

using(targetStream=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None))

{

//readfromtheinputstreamin4Kchunks

//andsavetooutputstream

constintbufferLen=4096;

byte[]buffer=newbyte[bufferLen];

intcount=0;

while((count=sourceStream.Read(buffer,0,bufferLen))>0)

{

targetStream.Write(buffer,0,count);

}

targetStream.Close();

sourceStream.Close();

}

}

}

实现的功能是到指定目录下按照日期进行目录划分,然后以传过来的文件名保存文件。这篇文章最主要的地方就是下面的Web.Config配置:

messageEncoding="Mtom"transferMode="Streamed"sendTimeout="00:10:00"/>

name="UploadWcfService.UpLoadService">

【责任编辑:姜程程 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值