您现在的位置是:首页 > 文章详情文章详情
C#对文件和文本数据进行Multipart形式的编码
为梦而奋
2017-10-04
814人已围观
简介白码驿站是一个面向开发者的知识共享社区,专注于为开发者打造一个纯净的技术交流社区(源码下载,免费在线图片压缩,jquery插件,插件下载,JS/CSS在线压缩。)-白码驿站
using System; using System.Text; using System.IO; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.IO.Compression; using System.Net.Cache; namespace Helper { /// <summary> /// 对文件和文本数据进行Multipart形式的编码 /// </summary> public class MultipartForm { private Encoding encoding; private MemoryStream ms; private string boundary; private byte[] formData; /// <summary> /// 获取编码后的字节数组 /// </summary> public byte[] FormData { get { if (formData == null) { byte[] buffer = encoding.GetBytes("--" + this.boundary + "--\r\n"); ms.Write(buffer, 0, buffer.Length); formData = ms.ToArray(); } return formData; } } /// <summary> /// 获取此编码内容的类型 /// </summary> public string ContentType { get { return string.Format("multipart/form-data; boundary={0}", this.boundary); } } /// <summary> /// 获取或设置对字符串采用的编码类型 /// </summary> public Encoding StringEncoding { set { encoding = value; } get { return encoding; } } /// <summary> /// 实例化 /// </summary> public MultipartForm() { boundary = string.Format("--{0}--", Guid.NewGuid()); ms = new MemoryStream(); encoding = Encoding.Default; } /// <summary> /// 添加一个文件 /// </summary> /// <param name="name">文件域名称</param> /// <param name="filename">文件的完整路径</param> public void AddFlie(string name, string filename) { if (!File.Exists(filename)) throw new FileNotFoundException("尝试添加不存在的文件。", filename); FileStream fs = null; byte[] fileData = { }; try { fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); fileData = new byte[fs.Length]; fs.Read(fileData, 0, fileData.Length); this.AddFlie(name, Path.GetFileName(filename), fileData, fileData.Length); } catch (Exception) { throw; } finally { if (fs != null) fs.Close(); } } /// <summary> /// 添加一个文件 /// </summary> /// <param name="name">文件域名称</param> /// <param name="filename">文件名</param> /// <param name="fileData">文件二进制数据</param> /// <param name="dataLength">二进制数据大小</param> public void AddFlie(string name, string filename, byte[] fileData, int dataLength) { if (dataLength <= 0 || dataLength > fileData.Length) { dataLength = fileData.Length; } StringBuilder sb = new StringBuilder(); sb.AppendFormat("--{0}\r\n", this.boundary); sb.AppendFormat("Content-Disposition: form-data; name=\"{0}\";filename=\"{1}\"\r\n", name, filename); sb.AppendFormat("Content-Type: {0}\r\n", this.GetContentType(filename)); sb.Append("\r\n"); byte[] buf = encoding.GetBytes(sb.ToString()); ms.Write(buf, 0, buf.Length); ms.Write(fileData, 0, dataLength); byte[] crlf = encoding.GetBytes("\r\n"); ms.Write(crlf, 0, crlf.Length); } /// <summary> /// 添加字符串 /// </summary> /// <param name="name">文本域名称</param> /// <param name="value">文本值</param> public void AddString(string name, string value) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("--{0}\r\n", this.boundary); sb.AppendFormat("Content-Disposition: form-data; name=\"{0}\"\r\n", name); sb.Append("\r\n"); sb.AppendFormat("{0}\r\n", value); byte[] buf = encoding.GetBytes(sb.ToString()); ms.Write(buf, 0, buf.Length); } /// <summary> /// 从注册表获取文件类型 /// </summary> /// <param name="filename">包含扩展名的文件名</param> /// <returns>如:application/stream</returns> private string GetContentType(string filename) { Microsoft.Win32.RegistryKey fileExtKey = null; ; string contentType = "application/stream"; try { fileExtKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(Path.GetExtension(filename)); contentType = fileExtKey.GetValue("Content Type", contentType).ToString(); } finally { if (fileExtKey != null) fileExtKey.Close(); } return contentType; } } }
很赞哦! (0)
点击排行
文章分类
- C# (211)
- Excel操作 (7)
- Ext.Net (1)
- FTP (7)
- Git (1)
- Html (7)
- JavaScript/Jquery (173)
- Json (5)
- PhotoShop (60)
- Sql Server (48)
- SVN (5)
- Tesseract-ocr图片识别 (5)
- UML (1)
- VS代码折叠插件 (1)
- winform (2)
- 操作IP地址 (5)
- 操作PDF (5)
- 插件 (166)
- 发送邮件 (2)
- 过滤HTML标签 (2)
- 缓存 (1)
- 跨域 (1)
- 目录操作 (14)
- 软件 (25)
- 视屏操作 (2)
- 数据库恢复 (2)
- 数据库优化 (5)
- 图片操作 (16)
- 文件操作 (24)
- 序列化 (3)
- 压缩 (5)
- 验证码 (4)
- 正则表达式 (21)
- 字符串加密 (11)
猜你喜欢
- SQL Prompt 免费下载 (SQL自定义插件的安装与激活:新版)
- Tesseract-OCR 中文识别
- 大公司为什么还在采用过时的技术
- C# 操作Excel , 支持超链接 跳转Sheet 页面,HSSFHyperlink函数
- SQL SERVER 2012 误删数据恢复过程
- X-UA-Compatible 解决IE浏览器样式不兼容问题
- sql Service 海量数据查询,如何提高查询效率--数据库分区
- LoadRunner 安装+汉化+破解
- sql Service 海量数据查询,如何提高查询效率--数据库设计
- C#中构造函数的执行序列(构造函数初始化器 this base)
- html5+ajax实现文件拖拽上传
- sql Service 海量数据查询,如何提高查询效率--SQL语句优化
评 论