积极答复者
AJAX上传文件

问题
答案
-
很简单的简单的文件上传的话(不用进度提示的),直接接收POST请求保存即可。
这个上传进度通知倒是很好的一个想法。
然而使用全局变量是不现实的,除非网站只有一个用户。还有,Session+Cookies的方法也没看出端倪。。。
其实实现思路是很简单的,只要转变Web服务为多线程便很容易实现。用delegate去委派任务,一个线程用于上传,一个线程用户回调上传进度。然后定时前台一个js去提交ajax请求获取当前进度。
对于楼主刚入门,用控件来完成的话就太简单不过了。推荐Ajax Control Toolkit —— AsyncFileUpload,参考:http://www.cnblogs.com/sun8134/archive/2009/10/13/1582374.html
- 已建议为答案 Willin Wang 2012年11月20日 3:23
- 已标记为答案 Song TianModerator 2012年11月22日 14:33
全部回复
-
我移到web论坛去了
Mike Feng
MSDN Community Support | Feedback to us
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
-
移到web论坛?什么意思啊?
你这个问题属于Web开发方面的,自然MSFT人员会移动这个帖子到合适的地方。
同时,就我所知——GridView中嵌套FileUpLoad控件,并且置于UpdatePanel(AJAX)是会有问题的。所以不建议这样做。你可以寻求第三方的AJAX上传工具。
建议参考:http://www.codeproject.com/Articles/16945/Simple-AJAX-File-Upload
或者你可以使用微软的AJAX扩展库,其中有异步文件上载控件的:
http://www.cnblogs.com/youring2/archive/2011/04/21/2024314.html
- 已编辑 ThankfulHeart 2012年11月17日 3:31
-
没有用到GridView和FileUpLoad控件啊,用的是html控件filepost啊!
//这是一般处理程序处理的代码:
public void ProcessRequest(HttpContext context) 2 { 3 string img = context.Request.Form["img"]; //图片路径 4 string id = context.Request.Form["id"]; //用户ID 5 if (img != null && id != null) 6 { 7 int i = Convert.ToInt32(id); 8 string sq = Path.GetFileNameWithoutExtension(img) + "zwh" + Path.GetExtension(img); 9 string pathee = HttpContext.Current.Server.MapPath("photo"); 10 string path = pathee + "\\" + sq; 11 using (Stream s = File.OpenRead(img)) 12 { 13 using (Stream s2 = File.OpenWrite(path)) 14 { 15 byte[] b = new byte[1024 * 4 * 4]; 16 int j; 17 while ((j = s.Read(b, 0, b.Length)) > 0) 18 { 19 s2.Write(b, 0, j); 20 } 21 } 22 } 23 24 if (new BLL.BBSUser().UpdateImg(path, i) > 0) 25 { 26 context.Response.Write("ok"); 27 context.Response.End(); 28 } 29 else 30 { 31 context.Response.Write("no"); 32 context.Response.End(); 33 } 34 } 35 }
-
AJAX 上传的弊端? 最大弊端就是,后台逻辑设计非常复杂。你不仅要考虑用户启用JS时候的AJAX上传,还要保证用户禁用js的普通post上传。
另外上传文件接收,不要转换成文件流最好,直接接收。
AJAX 上传的优势还是有很多的,比如用户体验好,效率高,当然比较保守的做法可以用flash上传。你可以看看QQ邮箱的做法,单个文件上传是AJAX,批量是FLASH。
www.willin.org
- 已建议为答案 Willin Wang 2012年11月19日 1:54
-
可以看看我写的文章
http://www.cnblogs.com/cracker/archive/2011/09/21/mvc_upload_progress.html
Asp.net mvc 3 实现进度条上传思路
弊端就是程序会复杂一些..
认真的活,认真的爱!
-
很简单的简单的文件上传的话(不用进度提示的),直接接收POST请求保存即可。
这个上传进度通知倒是很好的一个想法。
然而使用全局变量是不现实的,除非网站只有一个用户。还有,Session+Cookies的方法也没看出端倪。。。
其实实现思路是很简单的,只要转变Web服务为多线程便很容易实现。用delegate去委派任务,一个线程用于上传,一个线程用户回调上传进度。然后定时前台一个js去提交ajax请求获取当前进度。
对于楼主刚入门,用控件来完成的话就太简单不过了。推荐Ajax Control Toolkit —— AsyncFileUpload,参考:http://www.cnblogs.com/sun8134/archive/2009/10/13/1582374.html
- 已建议为答案 Willin Wang 2012年11月20日 3:23
- 已标记为答案 Song TianModerator 2012年11月22日 14:33