webuploader上传大视频,服务器文件损毁问题。

问题描述

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。。。。。早知道这是个玩具连下载都免了,简直害人。

时间: 2024-08-01 13:12:19

webuploader上传大视频,服务器文件损毁问题。的相关文章

jQuery webuploader分片上传大文件_jquery

一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传,如果文件比较大的话,即便是客户端显示文件已经上传了100%,还是会有一个比较长时间的等待,而且当前页面对服务器的请求也会被阻塞. 正常情况下,一般都是在长传完成后,在服务器直接保存. public void ProcessRequest(HttpContext context) { context.

Java中使用WebUploader插件上传大文件单文件和多文件的方法小结_java

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构spring+struts2+mybatis+MySQL 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

无法上传大文件到ftp服务器

问题描述 无法上传大文件到ftp服务器 客户端我用的是FlashFXP,其他工具也试 过,比如1G的文件,每次上传到300多兆久断开了,检查了服务器,没有限制大小 解决方案 最有可能是中间的安全网关类设备做了限制.

解决windows服务器中iis7上传大文件限制问题

原来的项目迁移至IIS7, 出现了个问题,原来有个上传大文件的功能,现在突然不能用了, 上传了一会儿会提示404错误-_-|||, 上网查了一下,发现原来是IIS7默认设置限制上传大小的原因. 方法一 在IIS7下,即便你在web.config设置了maxRequestLength="1048576"最大允许上传的大小,也是没用的,其实是受C:/Windows/System32/inetsrv/config/applicationHost.config的限制, 默认最大只能上传30M的

win2008 iis7 上传大文件限制的真正解决办法_win服务器

iis7 上传大文件限制的真正解决办法 修改IIS_schema.xml这个文件要先获得这个文件的控制权; 进入目录C:\Windows\System32\inetsrv\config\schema,修改文件IIS_schema.xml 权限: 进入IIS_schema.xml文件权限修改,选择"高级" 选择"所有者" 选中 administrators 确定 再进入权限编辑,修改administrators 完全控制. 再去掉IIS_schema.xml的只读属性

php上传大文件设置方法_php技巧

打开php.ini,首先找到 ;;;;;;;;;;;;;;;; ; file uploads ; ;;;;;;;;;;;;;;;; 区域,有影响文件上传的以下几个参数: file_uploads = on ;//是否允许通过http上传文件的开关.默认为on即是开 upload_tmp_dir ;//文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹 upload_max_filesize = 8m ;//望文生意,即允许上传文件大小的最大值.默认为2m 在 ;;;;;;

php上传大文件失败的解决办法

昨天一做php开发的网友问我为什么上传大文件总是失败,但是上传小文件就没有问题.作者一时半会儿也不知道什么原因,遂网上搜搜帮其分析原因,看到一篇很不错的关于php上传大文件失败的各种原因的总结以及各种解决办法的,于是转来与大家分享之.    下面分别是各种原因以及解决办法 (1)文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录.如果未指定则 PHP 使用系统默认值. php.ini文件中upload_tmp_dir用来说明PHP上传的文件放置的临时目录,要想上传文

asp.net如何上传大文件?

asp.net|上传大文件 在asp.net中,如何上传大文件呢?我们需要配置Web.config文件.具体如下: 在web.config中的<system.web></system.web>内加入如下代码:       <httpRuntime executi maxRequestLength="951200"          useFullyQualifiedRedirectUrl="true" minFreeThreads=&q

Uploadify上传大文件以及Http error 404 解决方案

之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章:[Asp.net]Uploadify所有配置说明,常见bug问题分析. 大文件上传 第一步:修改uploadify参数 1             'fileSizeLimit': '0',//单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值 2             'fileTypeDesc': '文件',