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. Codevs 1021 玛丽卡

    Codevs 1021 玛丽卡 题目地址:http://codevs.cn/problem/1021/ 题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他 ...

  2. 一个ICMP单元

    unit ICMPUtils; interface {$IFDEF VER80} { This source file is *NOT* compatible with Delphi 1 becaus ...

  3. c语言-交换两个整数

    使用c来写一个函数来实现交换两个整数. 第一种 一般的方法,引用中间变量,方便快捷. void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = t ...

  4. 【Android测试】【第十五节】Instrumentation——官方译文

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482207.html 前言 前面介绍了不少Android ...

  5. C#编程之委托与事件四(一)【转】

    C#编程之委托与事件(一)     本文试图在.net Framework环境下,使用C#语言来描述委托.事件的概貌.希望本文能有助于大家理解委托.事件的概念,理解委托.事件的用途,理解它的C#实现方 ...

  6. ionic获取焦点

    功能需求:点击按钮后获取input输入框的焦点 获取焦点用jq focus()不成功,因为angular也不推荐,所以网上找了一个在focus封装成指令的方法 指令写法: .directive('my ...

  7. Git push 常见用法

        Git push 在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,g ...

  8. 什么是core dump linux下用core和gdb查询出现"段错误"的地方

    什么是core dump   linux下用core和gdb查询出现"段错误"的地方 http://blog.chinaunix.net/uid-26833883-id-31932 ...

  9. Saving changes is not permitted in SQL Server

    From Save (Not Permitted) Dialog Box on MSDN : The Save (Not Permitted) dialog box warns you that sa ...

  10. Writing Your Own jQuery Plugins

    Setting Up <script src="js/jquery-1.9.1.min.js"></script> <script src=" ...