1:上传文件实例

public void UploadXMLLog(string xmlpath)         {             NameValueCollection nvc = new NameValueCollection();             CookieContainer cookies = new CookieContainer();             nvc.Add("", “”);             ......             string url = "UrlPath";             string res = UploadFile(xmlpath, url, nvc, cookies);         }

2:UploadFile源码

  1  public string UploadFile(string uploadfile, string url, NameValueCollection querystring, CookieContainer cookies, string fileFormName = "file", string contenttype = "multipart/form-data")
2 {
3 if ((fileFormName == null) ||
4 (fileFormName.Length == 0))
5 {
6 fileFormName = "file";
7 }
8
9 if ((contenttype == null) ||
10 (contenttype.Length == 0))
11 {
12 contenttype = "application/octet-stream";
13 }
14 Uri uri = new Uri(url);
15 string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
16 HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
17 webrequest.CookieContainer = cookies;
18 webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
19 webrequest.Method = "POST";
20 StringBuilder sb = new StringBuilder();
21 sb.Append("--");
22 sb.Append(boundary);
23 sb.Append("\r\n");
24 sb.Append("Content-Disposition: form-data; name=\"");
25 sb.Append(fileFormName);
26 sb.Append("\"; filename=\"");
27 sb.Append(uploadfile);
28 sb.Append("\"");
29 sb.Append("\r\n");
30 sb.Append("Content-Type: ");
31 sb.Append(contenttype);
32 sb.Append("\r\n");
33 sb.Append("\r\n");
34
35 string postHeader = sb.ToString();
36 byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
37 byte[] boundaryBytes = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
38 byte[] br = Encoding.ASCII.GetBytes("\r\n");
39 FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read);
40 long length = postHeaderBytes.Length + fileStream.Length + br.Length;
41 if (querystring != null)
42 {
43
44 StringBuilder sub = new StringBuilder();
45 foreach (string key in querystring.Keys)
46 {
47 sub.Append("--");
48 sub.Append(boundary);
49 sub.Append("\r\n");
50 sub.Append("Content-Disposition: form-data; name=\"");
51 sub.Append(key);
52 sub.Append("\"");
53 sub.Append("\r\n");
54 sub.Append("\r\n");
55 sub.Append(querystring[key]);
56 sub.Append("\r\n");
57 byte[] formitembytes = Encoding.UTF8.GetBytes(sub.ToString());
58 length += formitembytes.Length;
59 }
60 }
61 length += boundaryBytes.Length;
62 webrequest.ContentLength = length;
63 Stream requestStream = webrequest.GetRequestStream();
64 // Write out our post header
65 requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
66
67 // Write out the file contents
68 byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
69 int bytesRead = 0;
70 while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
71 requestStream.Write(buffer, 0, bytesRead);
72 requestStream.Write(br, 0, br.Length);
73 if (querystring != null)
74 {
75 StringBuilder sub = new StringBuilder();
76 foreach (string key in querystring.Keys)
77 {
78 sub.Append("--");
79 sub.Append(boundary);
80 sub.Append("\r\n");
81 sub.Append("Content-Disposition: form-data; name=\"");
82 sub.Append(key);
83 sub.Append("\"");
84 sub.Append("\r\n");
85 sub.Append("\r\n");
86 sub.Append(querystring[key]);
87 sub.Append("\r\n");
88 byte[] formitembytes = Encoding.UTF8.GetBytes(sub.ToString());
89 requestStream.Write(formitembytes, 0, formitembytes.Length);
90 }
91 }
92 // Write out the trailing boundary
93 requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
94 webrequest.Timeout = 1000000;
95
96 WebResponse responce = webrequest.GetResponse();
97
98 Stream s = responce.GetResponseStream();
99
100 StreamReader sr = new StreamReader(s);
101
102 string str = sr.ReadToEnd();
103
104
105 fileStream.Close();
106
107 requestStream.Close();
108
109 sr.Close();
110
111 s.Close();
112
113 responce.Close();
114
115 return str;
116
117 }

感谢:外国友人http://blogs.msdn.com/b/johan/archive/2006/11/15/are-you-getting-outofmemoryexceptions-when-uploading-large-files.aspx

C# 使用HttpWebRequest通过PHP接口 上传文件的更多相关文章

  1. C# HttpWebRequest 后台调用接口上传大文件以及其他参数

    直接上代码,包各位看客能用!!! 1.首先请求参数的封装 /// <summary> /// 上传文件 - 请求参数类 /// </summary> public class ...

  2. 使用python或robotframework调multipart/form-data接口上传文件

    这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个 ...

  3. 使用RestTemplate调用接口上传文件

    场景 接口接受一个文件,缓存在本地,验证文件的完整性及内容,然后将文件上传至云服务器: 下面只写利用RestTemplate将文件上传至云服务器,至于文件上传以及缓存在本地可以参考:JAVA文件上传: ...

  4. java 调用Spring接口上传文件及其他参数填充

    第一步:在Spring配置中添加以下内容 <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> < ...

  5. Jmeter接口上传文件

    一.使用抓包软件抓取该接口,查看参数(图例使用的是charles) 可以看到上传文件的参数名是file1 二.把抓取到的普通参数都放在参数这一栏里,如图所示,不要在意马赛克 三.参数名称写在如图所示的 ...

  6. Android、iOS与Servlet接口上传文件和JSON串的交互

    package etcom.servlet; import java.io.File; import java.io.IOException; import java.sql.Connection; ...

  7. C#调用百度云存储接口上传文件

    因前几日见园子里有人说可以把网站静态文件放在百度上,于是去百度开放平台看了看,发现之前那篇文章不是调的云存储接口啊... 于是自己写了个C#能调百度云存储的例子(百度云开放平台只提供php.java. ...

  8. Feign 接口上传文件

    1)Encoder 配置注入容器 2) public class SpringFormEncoderExtension extends FormEncoder { /** * 使用默认的feign编码 ...

  9. C# HttpClient Post 参数同时上传文件 上传图片 调用接口

    // 调用接口上传文件 using (var client = new HttpClient()) { using (var multipartFormDataContent = new Multip ...

随机推荐

  1. jquery怎么跳出当前的each循环

    有些朋友可能会以为在jquery跳出循环可以直接使用continue和break了,但是使用之后没有效果,因为在jquery中没有这两条命令. 后来上网查了下,得到了结果: return false; ...

  2. RDIFramework.NET ━ 9.2 员工管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.2  员工管理 -Web部分 员工(职员)管理主要是对集团.企事业内部员工进行管理.在后面的章节可以看到有一个用户管理,这两者 ...

  3. enum使用

    新建一个.h文件 typedef enum { type1 = 1, type2 = 2 };

  4. VMware下安装虚拟机Ubuntu14.04 Server设置桥接方式

    我本地的采用的上网方式的拨号上网,IP段是一公网下的通过路由设置的局域网,网段182.18.1.* 本地连接包含以下: 其中无线上网卡的.WMware桥接是自定义的局域网IP段:192.168.253 ...

  5. Web3D编程入门总结——面向对象的基础Web3D框架

    本篇主要通过分析Tony Parisi的sim.js库(原版代码托管于:https://github.com/tparisi/WebGLBook/tree/master/sim),总结基础Web3D框 ...

  6. EXCEL导入导出自己整理的一些方法

    //导入Excel代码 protected DataTable ExcelHelper(string filePaht) { string sFilePath2003 = Server.MapPath ...

  7. 解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused."

    缘由: 更新sdk,遇到了更新下载失败问题: Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml Fetch ...

  8. sprint演示

  9. Redis linux 下安装 及扩展配置

    1.首先在/usr/local/ 创建文件夹 reids Cd /usr/local/ mkdir redis 2.把redis安装包放在redis目录下面进行解压phpredis-2.2.4.tar ...

  10. 【实践】jQuery实现三联联动

    网上看过很多关于联动的jq或js代码,最近班上的前端大神教了我一种比网上还简单的jq联动方法,自己琢磨过之后确实比其他方法更简单更简洁所以在这里分享一下 先上html代码 <div id=&qu ...