问题描述
try{varcontext=System.Web.HttpContext.Current;stringbasePath="~/UserVideo/";basePath=(basePath.IndexOf("~")>-1)?System.Web.HttpContext.Current.Server.MapPath(basePath):basePath;HttpFileCollectionfiles=System.Web.HttpContext.Current.Request.Files;//如果目录不存在,则创建目录if(!Directory.Exists(basePath)){Directory.CreateDirectory(basePath);}stringp=basePath+"1\";if(!Directory.Exists(p)){Directory.CreateDirectory(p);}//----------------------------------------------//如果进行了分片if(context.Request.Form.AllKeys.Any(m=>m=="chunk")){//取得chunk和chunksintchunk=Convert.ToInt32(context.Request.Form["chunk"]);intchunks=Convert.ToInt32(context.Request.Form["chunks"]);//根据GUID创建用该GUID命名的临时文件stringpath=p+"1.mp4";//context.Server.MapPath("~/1/"+context.Request["guid"]);FileStreamaddFile=newFileStream(path,FileMode.Append,FileAccess.Write);BinaryWriterAddWriter=newBinaryWriter(addFile);//获得上传的分片数据流HttpPostedFilefile=context.Request.Files[0];Streamstream=file.InputStream;BinaryReaderTempReader=newBinaryReader(stream);//将上传的分片追加到临时文件末尾AddWriter.Write(TempReader.ReadBytes((int)stream.Length));//关闭BinaryReader文件阅读器TempReader.Close();stream.Close();AddWriter.Close();addFile.Close();TempReader.Dispose();stream.Dispose();AddWriter.Dispose();addFile.Dispose();if(chunk==(chunks-1)){Randomrand=newRandom(24*(int)DateTime.Now.Ticks);path=rand.Next()+".mp4";varfull=basePath+path;if(flag){stringname=context.Request["N"].ToString();stringpicP=context.Request["IP"].ToString();if(BLL.BLL.WriteVideo(name,picP,path)){//循环将所有的临时文件合并成一个文件//删除临时文件//FileInfofileinfo=newFileInfo(paths);//fileinfo.MoveTo(paths);}return"{"Type":"Success"}";}}return"{"Type":"Success"}";}else//没有分片直接保存{varsuffix=files[0].ContentType.Split('/');//获取文件格式var_suffix=suffix[1].Equals("jpeg",StringComparison.CurrentCultureIgnoreCase)?"":suffix[1];Randomrand=newRandom(24*(int)DateTime.Now.Ticks);varpath=rand.Next()+".jpg";varfull=basePath+path;files[0].SaveAs(full);return"{"Path":""+path+""}";}}catch{return"{"Type":"Wrong"}";}
解决方案
解决方案二:
测试哪里出错,比如用截包工具看发送数据是否正确,把分片数据单独保存成文件,检查每个分片是否正确,检查合并后的数据与分片数据是否一样来验证合并逻辑是否存在BUG
解决方案三:
引用楼主larkspur_521的回复:
try{varcontext=System.Web.HttpContext.Current;stringbasePath="~/UserVideo/";basePath=(basePath.IndexOf("~")>-1)?System.Web.HttpContext.Current.Server.MapPath(basePath):basePath;HttpFileCollectionfiles=System.Web.HttpContext.Current.Request.Files;//如果目录不存在,则创建目录if(!Directory.Exists(basePath)){Directory.CreateDirectory(basePath);}stringp=basePath+"1\";if(!Directory.Exists(p)){Directory.CreateDirectory(p);}//----------------------------------------------//如果进行了分片if(context.Request.Form.AllKeys.Any(m=>m=="chunk")){//取得chunk和chunksintchunk=Convert.ToInt32(context.Request.Form["chunk"]);intchunks=Convert.ToInt32(context.Request.Form["chunks"]);//根据GUID创建用该GUID命名的临时文件stringpath=p+"1.mp4";//context.Server.MapPath("~/1/"+context.Request["guid"]);FileStreamaddFile=newFileStream(path,FileMode.Append,FileAccess.Write);BinaryWriterAddWriter=newBinaryWriter(addFile);//获得上传的分片数据流HttpPostedFilefile=context.Request.Files[0];Streamstream=file.InputStream;BinaryReaderTempReader=newBinaryReader(stream);//将上传的分片追加到临时文件末尾AddWriter.Write(TempReader.ReadBytes((int)stream.Length));//关闭BinaryReader文件阅读器TempReader.Close();stream.Close();AddWriter.Close();addFile.Close();TempReader.Dispose();stream.Dispose();AddWriter.Dispose();addFile.Dispose();if(chunk==(chunks-1)){Randomrand=newRandom(24*(int)DateTime.Now.Ticks);path=rand.Next()+".mp4";varfull=basePath+path;if(flag){stringname=context.Request["N"].ToString();stringpicP=context.Request["IP"].ToString();if(BLL.BLL.WriteVideo(name,picP,path)){//循环将所有的临时文件合并成一个文件//删除临时文件//FileInfofileinfo=newFileInfo(paths);//fileinfo.MoveTo(paths);}return"{"Type":"Success"}";}}return"{"Type":"Success"}";}else//没有分片直接保存{varsuffix=files[0].ContentType.Split('/');//获取文件格式var_suffix=suffix[1].Equals("jpeg",StringComparison.CurrentCultureIgnoreCase)?"":suffix[1];Randomrand=newRandom(24*(int)DateTime.Now.Ticks);varpath=rand.Next()+".jpg";varfull=basePath+path;files[0].SaveAs(full);return"{"Path":""+path+""}";}}catch{return"{"Type":"Wrong"}";}
他这个问题真的很多。而且非常不稳定。效率也很低。之前做项目时用了这个控件,被坑惨了,各种问题。加了无数的班。还被老大骂,关键是网上的资料也少,找技术人员也找不到,遇到了问题根本就没人解答,最后换了别的控件才解决。后来在网上逛才发现这个控件是百度公司的一个程序员凭兴趣弄的一个玩具,主要作用就是宣传HTML5,可我们客户是政府单位的,还在用XP。。。。。早知道这是个玩具连下载都免了,简直害人。