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. yiii 框架登录 判断是否是游客模式及未登录状态

    原地址:http://blog.csdn.net/a553181867/article/details/50987388 最近在利用Yii 2.0框架进行项目后台的编写,遇到的第一个问题是用户登陆,包 ...

  2. The best career advice I’ve received

    I recently had an interesting discussion with a colleague. We were recounting our job histories and ...

  3. C++程序设计(二)

    1. 类 class CRectangle { public: int w, h; void Init( int w_, int h_ ) { w = w_; h = h_; } int Area() ...

  4. CentOS7 安装与配置Ant

    安装前提:需安装jdk(java-1.8.0-openjdk-devel). 1.到官网下载Antt包,我下的是:apache-ant-1.9.7-bin.tar.gz 2.解压缩 tar -zxvf ...

  5. Leetcode: Minimum Number of Arrows to Burst Balloons

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  6. Struts2自定义类型转换,和处理类型转换错误

    Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...

  7. System.arraycopy

    ref : http://blog.csdn.net/jaycee110905/article/details/45228249

  8. ReportDB数据库存储选型分析

    SQLServer关于reportDB的存储选型做如下分析: 网络存储两大主要类型: 1.NAS 支持的文件传输协议:NFS(unix/linux文件共享).SMB(windows).samba(li ...

  9. AppleWatch___学习笔记(三)iPhone和Apple Watch上的数据同步

    WatchKit App类似于之前iOS 8上新推出的App Extension(应用扩展),比如Today Extension(今天扩展)和Share Extension(分享扩展).只要你对iOS ...

  10. 使用 Centos 7 的 systemctl 管理服务

    CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,存系统服务里即:/usr/lib/ ...