宝玉的blog

专注于web开发技术
随笔 - 81, 评论 - 1563, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

  • re:发布一个爱心小软件——网页抓图
    <p>你好 我看了你的代码 不错啊,请问在asp.net C#中 没有了webbrowser 该怎么实现?</p> <p><a href="http...
    by weblogical(注册) on 2009/9/9 17:22:55
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:37
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:31
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:30
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:29
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Silverlight中,防止ComboBox抢焦点
    <p>我是初学者,您已经写了一个 组件上传的功能 。。我在2008下测试通过,,,但是弄2005测试的时候 发现 progress.aspx.cs页面的</p> <p&...
    by jxh12345j(注册) on 2009/4/7 8:55:12
  • ufnnutdh - Google Search
    ufnnutdh - Google Search
    by (匿名) on 2008/10/27 17:44:45
  • veysaync - Google Search
    veysaync - Google Search
    by (匿名) on 2008/10/5 5:20:49
  • mzgmhgio - Google Search
    mzgmhgio - Google Search
    by (匿名) on 2008/9/22 23:34:49
  • rhmhnyma - Google Search
    rhmhnyma - Google Search
    by (匿名) on 2008/9/22 7:48:44
  • re: 发布一个爱心小软件——网页抓图
    Maxthon应该有这个功能
    by passos(匿名) on 2008/7/21 20:05:23

广告

 
假如某网站有个表单,例如(url: http://localhost/login.aspx):
帐号
密码

我们需要在程序中提交数据到这个表单,对于这种表单,我们可以使用 WebClient.UploadData 方法来实现,将所要上传的数据拼成字符即可,程序很简单:
string uriString = "http://localhost/login.aspx"; // 创建一个新的 WebClient 实例. WebClient myWebClient = new WebClient(); string postData = "Username=admin&Password=admin"; // 注意这种拼字符串的ContentType myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded"); // 转化成二进制数组 byte[] byteArray = Encoding.ASCII.GetBytes(postData); // 上传数据,并获取返回的二进制数据. byte[] responseArray = myWebClient.UploadData(uriString,"POST",byteArray);

对于文件上传类的表单,例如(url: http://localhost/uploadFile.aspx):
文件

对于这种表单,我们可以使用
String uriString = "http://localhost/uploadFile.aspx"; // 创建一个新的 WebClient 实例. WebClient myWebClient = new WebClient(); string fileName = @"C:\upload.txt"; // 直接上传,并获取返回的二进制数据. byte[] responseArray = myWebClient.UploadFile(uriString,"POST",fileName);

还有一种表单,不仅有文字,还有文件,例如(url: http://localhost/uploadData.aspx):
文件名
文件

对于这种表单,似乎前面的两种方法都不能适用,对于第一种方法,不能直接拼字符串,对于第二种,我们只能传文件,重新回到第一个方法,注意参数:
public byte[] UploadData(
   string address,
   string method,
   byte[] data
);
在第一个例子中,是通过拼字符串来得到byte[] data参数值的,对于这种表单显然不行,反过来想想,对于uploadData.aspx这样的程序来说,直接通过网页提交数据,后台所获取到的流是什么样的呢?(在我以前的一篇blog中,曾分析过这个问题:asp无组件上传进度条解决方案),最终的数据如下:
-----------------------------7d429871607fe
Content-Disposition: form-data; name="file1"; filename="G:\homepage.txt"
Content-Type: text/plain
宝玉:http://www.webuc.net
-----------------------------7d429871607fe
Content-Disposition: form-data; name="filename"
default filename
-----------------------------7d429871607fe--

所以只要拼一个这样的byte[] data数据Post过去,就可以达到同样的效果了。但是一定要注意,对于这种带有文件上传的,其ContentType是不一样的,例如上面的这种,其ContentType为"multipart/form-data; boundary=---------------------------7d429871607fe"。有了ContentType,我们就可以知道boundary(就是上面的"---------------------------7d429871607fe"),知道boundary了我们就可以构造出我们所需要的byte[] data了,最后,不要忘记,把我们构造的ContentType传到WebClient中(例如:webClient.Headers.Add("Content-Type", ContentType);)这样,就可以通过WebClient.UploadData 方法上载文件数据了。

具体代码如下:
生成二进制数据类的封装
using System; using System.Web; using System.IO; using System.Net; using System.Text; using System.Collections; namespace UploadData.Common { /// <summary> /// 创建WebClient.UploadData方法所需二进制数组 /// </summary> public class CreateBytes { Encoding encoding = Encoding.UTF8; /// <summary> /// 拼接所有的二进制数组为一个数组 /// </summary> /// <param name="byteArrays">数组</param> /// <returns></returns> /// <remarks>加上结束边界</remarks> public byte[] JoinBytes(ArrayList byteArrays) { int length = 0; int readLength = 0; // 加上结束边界 string endBoundary = Boundary + "--\r\n"; //结束边界 byte[] endBoundaryBytes = encoding.GetBytes(endBoundary); byteArrays.Add(endBoundaryBytes); foreach(byte[] b in byteArrays) { length += b.Length; } byte[] bytes = new byte[length]; // 遍历复制 // foreach(byte[] b in byteArrays) { b.CopyTo(bytes, readLength); readLength += b.Length; } return bytes; } public bool UploadData(string uploadUrl, byte[] bytes, out byte[] responseBytes) { WebClient webClient = new WebClient(); webClient.Headers.Add("Content-Type", ContentType); try { responseBytes = webClient.UploadData(uploadUrl, bytes); return true; } catch (WebException ex) { Stream resp = ex.Response.GetResponseStream(); responseBytes = new byte[ex.Response.ContentLength]; resp.Read(responseBytes, 0, responseBytes.Length); } return false; } /// <summary> /// 获取普通表单区域二进制数组 /// </summary> /// <param name="fieldName">表单名</param> /// <param name="fieldValue">表单值</param> /// <returns></returns> /// <remarks> /// -----------------------------7d52ee27210a3c\r\nContent-Disposition: form-data; name=\"表单名\"\r\n\r\n表单值\r\n /// </remarks> public byte[] CreateFieldData(string fieldName, string fieldValue) { string textTemplate = Boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n"; string text = String.Format(textTemplate, fieldName, fieldValue); byte[] bytes = encoding.GetBytes(text); return bytes; } /// <summary> /// 获取文件上传表单区域二进制数组 /// </summary> /// <param name="fieldName">表单名</param> /// <param name="filename">文件名</param> /// <param name="contentType">文件类型</param> /// <param name="contentLength">文件长度</param> /// <param name="stream">文件流</param> /// <returns>二进制数组</returns> public byte[] CreateFieldData(string fieldName, string filename,string contentType, byte[] fileBytes) { string end = "\r\n"; string textTemplate = Boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; // 头数据 string data = String.Format(textTemplate, fieldName, filename, contentType); byte[] bytes = encoding.GetBytes(data); // 尾数据 byte[] endBytes = encoding.GetBytes(end); // 合成后的数组 byte[] fieldData = new byte[bytes.Length + fileBytes.Length + endBytes.Length]; bytes.CopyTo(fieldData, 0); // 头数据 fileBytes.CopyTo(fieldData, bytes.Length); // 文件的二进制数据 endBytes.CopyTo(fieldData, bytes.Length + fileBytes.Length); // \r\n return fieldData; } 属性 } }

在Winform中调用

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using UploadData.Common; using System.IO; namespace UploadDataWin { /// <summary> /// frmUpload 的摘要说明。 /// </summary> public class frmUpload : System.Windows.Forms.Form { private System.Windows.Forms.Label lblAmigoToken; private System.Windows.Forms.TextBox txtAmigoToken; private System.Windows.Forms.Label lblFilename; private System.Windows.Forms.TextBox txtFilename; private System.Windows.Forms.Button btnBrowse; private System.Windows.Forms.TextBox txtFileData; private System.Windows.Forms.Label lblFileData; private System.Windows.Forms.Button btnUpload; private System.Windows.Forms.OpenFileDialog openFileDialog1; private System.Windows.Forms.TextBox txtResponse; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public frmUpload() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } Windows 窗体设计器生成的代码 /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new frmUpload()); } private void btnUpload_Click(object sender, System.EventArgs e) { // 非空检验 if (txtAmigoToken.Text.Trim() == "" || txtFilename.Text == "" || txtFileData.Text.Trim() == "") { MessageBox.Show("Please fill data"); return; } // 所要上传的文件路径 string path = txtFileData.Text.Trim(); // 检查文件是否存在 if (!File.Exists(path)) { MessageBox.Show("{0} does not exist!", path); return; } // 读文件流 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); // 这部分需要完善 string ContentType = "application/octet-stream"; byte[] fileBytes = new byte[fs.Length]; fs.Read(fileBytes, 0, Convert.ToInt32(fs.Length)); // 生成需要上传的二进制数组 CreateBytes cb = new CreateBytes(); // 所有表单数据 ArrayList bytesArray = new ArrayList(); // 普通表单 bytesArray.Add(cb.CreateFieldData("FileName", txtFilename.Text)); bytesArray.Add(cb.CreateFieldData("AmigoToken", txtAmigoToken.Text)); // 文件表单 bytesArray.Add(cb.CreateFieldData("FileData", path , ContentType, fileBytes)); // 合成所有表单并生成二进制数组 byte[] bytes = cb.JoinBytes(bytesArray); // 返回的内容 byte[] responseBytes; // 上传到指定Url bool uploaded = cb.UploadData("http://localhost/UploadData/UploadAvatar.aspx", bytes, out responseBytes); // 将返回的内容输出到文件 using (FileStream file = new FileStream(@"c:\response.text", FileMode.Create, FileAccess.Write, FileShare.Read)) { file.Write(responseBytes, 0, responseBytes.Length); } txtResponse.Text = System.Text.Encoding.UTF8.GetString(responseBytes); } private void btnBrowse_Click(object sender, System.EventArgs e) { if(openFileDialog1.ShowDialog() == DialogResult.OK) { txtFileData.Text = openFileDialog1.FileName; } } } }

完整的代码见附件: UploadData.rar(38K),解压后给web目录建个虚拟目录"UploadData",其中UploadAvatar.aspx是实际的上传处理页,如果上传成功,则返回文件名和文件类型等信息。default.aspx是asp.net页面来调用 WebClient.UploadData方法提交数据,UploadDataWin项目则是winform程序调用。

打印 | 张贴于 2005-04-17 02:04:00 | Tag:Web技术

留言反馈

#ufnnutdh - Google Search 编辑
ufnnutdh - Google Search
2008-10-27 17:44:45 | [匿名:]
#rhmhnyma - Google Search 编辑
rhmhnyma - Google Search
2008-09-22 07:48:44 | [匿名:]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
我很需要参考一下,能发一份给我吗?
谢谢
hys2005@21cn.com
2008-01-12 16:40:00 | [匿名:Vincent]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
也发一份给我,我也下载不了附件.aa2223@163.com
2008-01-07 16:15:00 | [匿名:cwj]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
我也需要参考一下,能发一份给我吗?
请问这个能满足大数据下载吗?
andy.chen21@163.com
2007-09-20 15:00:00 | [匿名:andy]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
补充一句,我特别想知识.aspx服务器是怎么处理的?
2007-09-17 16:56:00 | [匿名:逸散]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
我也需要参考一下,能发一份给我吗?
5cool@163.com
2007-09-17 16:55:00 | [匿名:逸散]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
我现在很需要你的代码进行参考,麻烦你能给我发一份吗?
win32girl@126.com
lijuan.yang@eland-g.com
2007-09-03 19:17:00 | [匿名:win32girl]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
没有办法下啊,楼主。能不能发个给我啊 sunyante@163.com
2007-08-17 13:43:00 | [匿名:sun]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
例子不能下载,
也发个实例给我吧!谢谢啦!
kissbey@gmail.com
2007-04-12 06:42:00 | [匿名:kissbey]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
例子不能下载,
也发个实例给我吧!谢谢啦!
yhlou@msn.com
2007-03-26 19:05:00 | [匿名:kinglou]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
福建不能下载了,能发一份完整的到我的邮箱吗?
非常感谢..好东西大家一起分享..
yjj8756@163.com
2007-03-24 18:04:00 | [匿名:flysky]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
另外用UploadData方法提交数据到表单,.如遇到验证码应该怎么解决啊.
2007-01-04 16:24:00 | [匿名:沙漠风暴]
#回复: 用 WebClient.UploadData 方法 上载文件数据 编辑
用uploadData方法提交数据到这个表单,我试了N次都没成功,不知道是为什么.可否将一份提交数据到表单的源码直接发到我的邮箱.谢谢.zy41796745@163.com
2007-01-04 16:18:00 | [匿名:沙漠风暴]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
你好 用你这个方法得到的为什么是登录前页面的信息
2006-09-28 13:30:00 | [匿名:yawulo]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
宝玉,你好!
我把你的UploadData.rar里的网站里的UploadAvatar.aspx.cs里在Page_Load里相应的代码放在btnUpload_Click里后就不能用程序提交了(直接访问网页能提交)。
这个是怎么回事,我想应该好多用asp.net的网站都有这种情况吧!
2006-09-22 22:45:00 | [匿名:Viewer]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
宝玉兄你好!
你的那个附件为什么不能下载啊,(完整的代码见附件: UploadData.rar(38K),)能否给我发一份啊,我的邮箱是 zhu-sa@163.com QQ :75982109


谢谢了哦, 还有你的QQ为什么老不上啊
盼复
2006-07-25 09:51:00 | [匿名:风情浪子]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
你好!可以发一份给UploadData.rar 我吗?谢谢
上面的链接失效了。jxyzyus@yahoo.com
2006-07-18 18:07:00 | [匿名:学习]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
你好!可以发一份UploadData.rar 给我吗?谢谢
上面的链接失效了。liubihai@gmail.com
2006-05-15 18:09:00 | [匿名:碧海]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
你好我想要分实例 nbgzc@hotmail.com
2006-04-17 09:06:00 | [匿名:恍然小悟]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
我用WebClient.UploadData 老是碰到 403错误
downdata 则没有问题,请问是怎么回事那?

邮箱: ayun00◎sina.com
2006-02-20 15:13:00 | [匿名:ayun]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
你好我想要分实例x-philes@hotmail.com
2006-01-21 18:14:00 | [匿名:spy7]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
能发份实力给我吗?谢谢了
sbkd_andy@hotmail.com
2005-12-20 15:15:00 | [匿名:Andy Li]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
sunly79@126.com
也发个实例给我吧!谢谢啦!
2005-11-10 09:19:00 | [匿名:Sunly]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
请问,如果是向服务器传文件,而服务器又需要身份验证,比如需要登陆,那用webclient应该怎么实现文件的上传呢?谢谢!
2005-10-25 09:30:00 | [匿名:wind]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
没有办法下载了,谁能把实例发一个给我
我的emial : jjl123456@etang.com
2005-10-13 14:07:00 | [匿名:jjl123456]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
<font color=red size=100>test</font>
2005-09-27 16:09:00 | [匿名:flyaway]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
没法下载 :(
2005-09-24 14:00:00 | [匿名:Victor]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
日本歌
2005-09-20 18:28:00 | [匿名:GN744801]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
我现在需要做一个大文件上载的页面程序,用的是.net自带的html控件File Field,在本机没问题,但上载的服务器就出错,这个控件好像对文件上载有限制不能超过10M,怎么设置才能对文件没有限制,我的文件应该几十M.
您的下载不了,能支持多大.能否发到我的邮箱.creativelife@126.com
2005-09-07 11:03:00 | [匿名:蓝月亮]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
源码下载不了啊
2005-09-06 10:00:00 | [匿名:wxdxy]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
jbh
2005-08-22 13:33:00 | [匿名:PEGGY]
#re:用 WebClient.UploadData 方法 上载文件数据 编辑
用 WebClient.UploadData 方法 上载文件数据ooeess
2005-06-15 22:58:00 | [匿名:测汞]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
请查阅RFC1867
2005-06-15 13:20:00 | [匿名:A.Z]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
我很顺利的reflector了1.1的WebClient 取名叫WebClientEx,对于1.1的framework net组件还是比较的简单,WebClient 就是简单的对webrequest和webrespone的封装。实现proxy和cookie只需要用它们的派生类便可以了。
但是假如用2.0的framework时,你会发现虽然在很多地方它只是修饰了一下代码,但是在net组件里面异步的调用成了主线,类结构很庞大,代码耦合度很高,所以很难在1.1里抽出使用。
今天我也看了标准浏览器模式下的post值,和LZ发现的结果一致,看了LZ的文章我也对asp的处理方式也有了一定的认识,谢谢啦。
2005-06-14 22:47:00 | [匿名:A.Z]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
假如需要之前登陆的呢,需要CookieContainer,你的这个类就不行!
2005-06-14 22:22:00 | [匿名:C# hack]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
有个问题我想问一下,如何用webclient把某个人的博客的所有文章按分类下载到我本地的access数据库呀
2005-05-31 10:34:00 | [匿名:蛙蛙]
#re:用 WebClient.UploadData 方法 上载文件数据 编辑
用 WebClient.UploadData 方法 上载文件数据ooeess
2005-05-25 09:47:00 | [匿名:风速计]
#用 WebClient.UploadData 方法 上载文件数据[转] 编辑
Ping Back来自:www.donews.net
2005-05-14 15:45:00 | [匿名:马甲]
#re:用 WebClient.UploadData 方法 上载文件数据 编辑
^_~,pretty good!csharpsseeoo
2005-05-03 12:13:00 | [匿名:自动滴定仪]
#动态构建窗体 编辑
我的意思是,难道,webform可以象winform一样可以动态创建吗?似乎不太可能吧
2005-04-18 22:48:00 | [匿名:try]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
能不能把代码折起来呀,看起来太费劲了。
2005-04-18 20:57:00 | [匿名:Microdict]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
楼主的方法是不错,可是如果aspx页面是需要验证的,那winform程序该如何做?
2005-04-18 18:27:00 | [匿名:leisang]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
我还是不很理解你的问题
2005-04-18 18:14:00 | [匿名:宝玉]
#动态构建窗体 编辑
动态构建窗体?
这个还从没试过,
难道可以和windows form一样可以动态创建?怎么显示出来?
=============
webform1 = new webfrom()
webform1.show()
================
2005-04-18 16:15:00 | [匿名:try]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
to jerry:
这个是否超时和上传的大小只和服务器端有关,看服器端设置的超时时间和允许的大小
to Jamebo:
这个程序的前提是在项目中,aspx页面已经做好,只能采用这种方案上传。
to try:
如果可以获取页面的HTML,然后分析页面HTML的表单,再动态构建窗体,理论上是可行的
2005-04-18 14:40:00 | [匿名:宝玉]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
如果上传文件,而且又是Rich Client的话,我觉得WSE DIME 是不错的选择,直接使用WebClient上传当然可以,只是考虑到大文件,超时,以及上传进度等,可能还是麻烦些,而且还需要很熟悉Http 协议和MIME格式。
不过也是很好的开阔思路的想法啊
THanks
2005-04-18 11:39:00 | [匿名:Jamebo]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
请问有没有人经历过我那样的?


最近用webclient提交表单遇到问题,难以解决。
==============================
最近做在线银行支付。
为了省略一个提交页面,把应该由页面提交的内容,用代码来完成提交,就是模拟提交表单。
可用模拟提交表单后,居然不能返回银行的支付页面。(如果用页面提交的话会返回银行的支付页面-当然页面提交的参数等等都是页面加载的时候赋值后,才提交的)
由此想到了,能不能像windows form一样能动态创建窗体。
2005-04-18 09:23:00 | [匿名:try]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
用这种方法上传文件,文件大小有没有限制?通常的web方式上传文件对文件大小很苛刻,超过3M左右就基本上很难上传成功.
2005-04-18 01:09:00 | [匿名:jerry]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
宝玉精神永不倒~~~
2005-04-17 23:54:00 | [匿名:Nickcheng]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
没法实现 支持 Proxy

可以的.
2005-04-17 13:30:00 | [匿名:montaque]
#re: 用 WebClient.UploadData 方法 上载文件数据 编辑
最近用webclient提交表单遇到问题,难以解决。
==============================
最近做在线银行支付。
为了省略一个提交页面,把应该由页面提交的内容,用代码来完成提交,就是模拟提交表单。
可用模拟提交表单后,居然不能返回银行的支付页面。(如果用页面提交的话会返回银行的支付页面-当然页面提交的参数等等都是页面加载的时候赋值后,才提交的)
由此想到了,能不能像windows form一样能动态创建窗体。
2005-04-17 13:25:00 | [匿名:try]
#友情提醒 编辑
WebClient 实际 也是 WebRequest 实现的(Reflector)
但是 WebClient 并没有把 WebProxy CookieContainer 暴露出来
没法实现 支持 Proxy 以及 session!

建议直接用 WebRequest 实现(当然是参考 Reflector WebClient)

我曾经WebRequest 实现过:
分块断点续传(Upload)的应用程序客户端及其配套的 Server 的 ASPX!
实际就是:
不但要传二进制数据另外就是 该段二进制数据在原文件的起止位置(相当于放在两个普通的文本域里)还有文件名之类的文本域等!
Server 的 ASPX 要编程支持该约定!

但后来发现:
其实实现 支持 分块断点续传(Upload)的应用程序客户端 的 WebService 方案(Server/Client)代码都更简单!

2005-04-17 03:25:00 | [匿名:playyuer@Microshaoft]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0