C#使用HttpWebRequest和HttpWebResponse上传文件示例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#使用HttpWebRequest和HttpWebResponse上传文件示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5479字,纯文字阅读大概需要8分钟。
内容图文
![C#使用HttpWebRequest和HttpWebResponse上传文件示例](/upload/InfoBanner/zyjiaocheng/858/a9e7fc97fbd6467395fbcc2c682f6b9b.jpg)
C#使用HttpWebRequest和HttpWebResponse上传文件示例
1.HttpHelper类:复制内容到剪贴板程序代码 using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Text;
namespace ConsoleApplication1
{
????public static class HttpHelper
????{
????????private static readonly Encoding DEFAULTENCODE = Encoding.UTF8;
????????/// <summary>
????????/// HttpUploadFile
????????/// </summary>
????????/// <param name="url"></param>
????????/// <param name="file"></param>
????????/// <param name="data"></param>
????????/// <returns></returns>
????????public static string HttpUploadFile(string url, string file, NameValueCollection data)
????????{
????????????return HttpUploadFile(url, file, data, DEFAULTENCODE);
????????}
????????/// <summary>
????????/// HttpUploadFile
????????/// </summary>
????????/// <param name="url"></param>
????????/// <param name="file"></param>
????????/// <param name="data"></param>
????????/// <param name="encoding"></param>
????????/// <returns></returns>
????????public static string HttpUploadFile(string url, string file, NameValueCollection data, Encoding encoding)
????????{
????????????return HttpUploadFile(url, new string[] { file }, data, encoding);
????????}
????????/// <summary>
????????/// HttpUploadFile
????????/// </summary>
????????/// <param name="url"></param>
????????/// <param name="files"></param>
????????/// <param name="data"></param>
????????/// <returns></returns>
????????public static string HttpUploadFile(string url, string[] files, NameValueCollection data)
????????{
????????????return HttpUploadFile(url, files, data, DEFAULTENCODE);
????????}
????????/// <summary>
????????/// HttpUploadFile
????????/// </summary>
????????/// <param name="url"></param>
????????/// <param name="files"></param>
????????/// <param name="data"></param>
????????/// <param name="encoding"></param>
????????/// <returns></returns>
????????public static string HttpUploadFile(string url, string[] files, NameValueCollection data, Encoding encoding)
????????{
????????????string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
????????????byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
????????????byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
????????????//1.HttpWebRequest
????????????HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
????????????request.ContentType = "multipart/form-data; boundary=" + boundary;
????????????request.Method = "POST";
????????????request.KeepAlive = true;
????????????request.Credentials = CredentialCache.DefaultCredentials;
????????????using (Stream stream = request.GetRequestStream())
????????????{
????????????????//1.1 key/value
????????????????string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
????????????????if (data != null)
????????????????{
????????????????????foreach (string key in data.Keys)
????????????????????{
????????????????????????stream.Write(boundarybytes, 0, boundarybytes.Length);
????????????????????????string formitem = string.Format(formdataTemplate, key, data[key]);
????????????????????????byte[] formitembytes = encoding.GetBytes(formitem);
????????????????????????stream.Write(formitembytes, 0, formitembytes.Length);
????????????????????}
????????????????}
????????????????//1.2 file
????????????????string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
????????????????byte[] buffer = new byte[4096];
????????????????int bytesRead = 0;
????????????????for (int i = 0; i < files.Length; i++)
????????????????{
????????????????????stream.Write(boundarybytes, 0, boundarybytes.Length);
????????????????????string header = string.Format(headerTemplate, "file" + i, Path.GetFileName(files[i]));
????????????????????byte[] headerbytes = encoding.GetBytes(header);????????????????????
????????????????????stream.Write(headerbytes, 0, headerbytes.Length);
????????????????????using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read))
????????????????????{????????????????????????
????????????????????????while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
????????????????????????{
????????????????????????????stream.Write(buffer, 0, bytesRead);
????????????????????????}
????????????????????}
????????????????}
????????????????//1.3 form end
????????????????stream.Write(endbytes, 0, endbytes.Length);
????????????}
????????????//2.WebResponse
????????????HttpWebResponse response = (HttpWebResponse)request.GetResponse();
????????????using (StreamReader stream = new StreamReader(response.GetResponseStream()))
????????????{
????????????????return stream.ReadToEnd();
????????????}
????????}
????}
}
2.调用示例:
复制内容到剪贴板程序代码 using System;
using System.Collections.Specialized;
namespace ConsoleApplication1
{
????class Program
????{
????????static void Main(string[] args)
????????{
????????????NameValueCollection data = new NameValueCollection();
????????????data.Add("name", "木子屋");
????????????data.Add("url", "http://www.mzwu.com/");
????????????Console.WriteLine(HttpHelper.HttpUploadFile("http://localhost/Test", new string[] { @"E:\Index.htm", @"E:\test.rar" }, data));
????????????Console.ReadKey();
????????}
????}
}
参考资料
[1].ASP无组件上传原理:http://www.jjshang.com/jjshangnew/book/asp/mustfiles/jjupload.pdf
[2].Upload files with HTTPWebrequest (multipart/form-data):http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data?
内容总结
以上是互联网集市为您收集整理的C#使用HttpWebRequest和HttpWebResponse上传文件示例全部内容,希望文章能够帮你解决C#使用HttpWebRequest和HttpWebResponse上传文件示例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。