Post 方式 模仿 form表单 上传 图片 设置enctype = multipart/form-data

<form  enctype="multipart/form-data"></form>

 

自定义 MultipartFormData 类  (4.5以上版本好像有这个类  类名称叫啥忘记了)

/// <summary>
/// multipart/form-data 数据类型
/// </summary>
public class MultipartFormData
{
public static string ContentType = "multipart/form-data; boundary=A300x";
private string headerStream = "--A300x\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
private string footerString = "--A300x--\r\n";
private string compart = "\r\n";
private string headerString = "--A300x\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n"; private List<byte> lists = new List<byte>();
private byte[] footerBytes;
private byte[] comparts;
public MultipartFormData()
{
footerBytes = Encoding.UTF8.GetBytes(footerString);
comparts = Encoding.UTF8.GetBytes(compart);
}
public byte[] Buffer
{
get
{
return lists.ToArray();
}
} private bool IsEnd = false;
/// <summary>
///
/// </summary>
public void End()
{
if (!IsEnd)
{
IsEnd = true;
//lists.AddRange(footerBytes.ToList());
this.AddRanges(footerBytes);
} } public void AddRanges(byte[] array) {
foreach (byte b in array)
lists.Add(b);
} /// <summary>
/// 向序列化到多部/窗体数据 MIME 类型的 对象集合添加 HTTP 内容
/// </summary>
/// <param name="content">要添加到集合中的 HTTP 内容</param>
/// <param name="name">要添加的 HTTP 内容的名称</param>
public void Add(string content, string name)
{ byte[] headerBytes = Encoding.UTF8.GetBytes(String.Format(headerString, name));
this.AddRanges(headerBytes);
byte[] buffer = Encoding.UTF8.GetBytes(content);
this.AddRanges(buffer);
this.AddRanges(comparts); } /// <summary>
/// 向序列化到多部/窗体数据 MIME 类型的 对象集合添加 HTTP 内容
/// </summary>
/// <param name="content">要添加到集合中的 HTTP 内容</param>
/// <param name="name">要添加的 HTTP 内容的名称</param>
/// <param name="fileName">要添加到集合中的 HTTP 内容的文件名</param>
public void Add(Stream content, string name, string fileName)
{
byte[] headerBytes = Encoding.UTF8.GetBytes(String.Format(headerStream, name, fileName));
this.AddRanges(headerBytes);
byte[] buffer = new byte[content.Length];
content.Read(buffer, 0, buffer.Length);
content.Seek(0, SeekOrigin.Begin);
this.AddRanges(buffer);
this.AddRanges(comparts);
} /// <summary>
/// 向序列化到多部/窗体数据 MIME 类型的 对象集合添加 HTTP 内容
/// </summary>
/// <param name="content">要添加到集合中的 HTTP 内容</param>
/// <param name="name">要添加的 HTTP 内容的名称</param>
/// <param name="fileName">要添加到集合中的 HTTP 内容的文件名</param>
public void Add(byte[] content, string name, string fileName)
{
byte[] headerBytes = Encoding.UTF8.GetBytes(String.Format(headerStream, name, fileName));
this.AddRanges(headerBytes);
this.AddRanges(content);
this.AddRanges(comparts);
} }
 
 
上传图片代码
        /// <summary>
/// form-data 数据类型传递数据
/// </summary>
private MultipartFormData multiparFormData = new MultipartFormData(); /// <summary>
/// 键值对应
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void AddFormData(string key, string value)
{
this.multiparFormData.Add(value, key);
}
/// <summary>
/// 传递一个 strem 类型
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="fileName"></param>
public void AddFormData(string key, Stream value, string fileName)
{
this.multiparFormData.Add(value, key, fileName);
}
/// <summary>
/// 传递一个 byte[] 类型
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="fileName"></param>
public void AddFormData(string key, byte[] value, string fileName)
{
this.multiparFormData.Add(value, key, fileName);
}
private static CookieContainer m_Cookie = new CookieContainer();
/// <summary>
/// POST form-data 方式请求消息
/// </summary>
/// <param name="url"></param>
/// <param name="isHttps"></param>
/// <returns></returns>
public string PostFromData(string url, bool isHttps) {
try
{
multiparFormData.End(); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = MultipartFormData.ContentType;
request.CookieContainer = m_Cookie;//设置上一个访问页面的cookie 保持session
request.ContentLength = multiparFormData.Buffer.Length; Stream stream = request.GetRequestStream(); stream.Write(multiparFormData.Buffer, 0, multiparFormData.Buffer.Length);
stream.Close(); WebResponse response = request.GetResponse();
Stream streamResponse = response.GetResponseStream();
StreamReader sr = new StreamReader(streamResponse); return sr.ReadToEnd();
}
catch (Exception ex) {
Log.WriteLog("POST form-data 方式请求消息:" + ex.Message);
return "error";
}
}

POST 方式上传图片的更多相关文章

  1. OSS web直传 ajax方式 上传图片、文件

    部分js代码 send_request = function(){//这是从后台获取认证策略等信息. var htmlobj=$.ajax({url:root+"/service/polic ...

  2. 010-java 表单方式或者base64方式上传图片,后端使用nutz的post转发图片到另一个请求

    本地上传图片 方式一.使用表单方式上传-enctype <form enctype="multipart/form-data" method="post" ...

  3. ajax方式上传图片到Django后台

    参考价值最大 https://blog.csdn.net/huangql517/article/details/81259671 https://www.cnblogs.com/chenjianhon ...

  4. 使用base64转码的方式上传图片

    1.前端html代码 <input style="width:100%" onchange="loadpicture(1)" type="fil ...

  5. django 的 ajax 方式上传图片

    页面代码: <html>     <!-- 引入相关的js文件,相对路径  -->     <script type="text/javascript" ...

  6. MVC 使用AJAX POST上传图片的方式

    我们来总结一下使用AJAX以POST方式上传图片的方法. 一.普遍的一种是以file的格式请求.在Request.Files中获取文件. public ActionResult UploadFile( ...

  7. 部分安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法

    前端JS中使用XMLHttpRequest 2上传图片到服务器,PC端和大部分手机上都正常,但在少部分安卓手机上上传失败,服务器上查看图片,显示字节数为0.下面是上传图片的核心代码: HTML < ...

  8. 在linux下使用百度ueditor编辑器上传图片

    百度ueditor编辑器虽然强大,但是也有不足的地方.如果对ueditor流程不是很熟悉可以说走的弯路比较多,费力不讨好.下面呢,就是要解决ueditor遇到的问题. 用ueditor上传图片遇到的问 ...

  9. 通过Canvas及File API缩放并上传图片

    原文地址:Resize an Image Using Canvas, Drag and Drop and the File API 示例地址:Canvas Resize Demo 原文作者:Dr. T ...

随机推荐

  1. SQL Server 启用与禁止触发器

    启用: disable trigger trigger_name on {objectName | database_name | server}; 禁用: enable trigger trigge ...

  2. LINUX查看硬件配置命令

    LINUX查看硬件配置命令   系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinf ...

  3. GDAL python教程(1)——用OGR读写矢量数据

    本教程的讲义和源码都是取自Utah State University的openGIS课程 相关资料,包括讲义.源码.数据样例,请从此处下载http://www.gis.usu.edu/~chrisg/ ...

  4. MFC对话框屏蔽Enter和ESC键

    MFC对话框屏蔽Enter和ESC键参考:http://www.docin.com/p-122354833.html 方法一重载PreTranslateMessage函数 BOOL CXXDlg::P ...

  5. Android文件存储使用参考

    可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时 ...

  6. ADO.NET FOR MySQL帮助类

    using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...

  7. 自学xml的几个例子

    xml是一种被用来传输和存储数据的语言,下面给出一些学习xml过程一些简单的例子.具体xml语法请转:http://www.w3school.com.cn/xml/xml_intro.asp 例子1: ...

  8. Orcale语句大全

    原文地址:http://www.cnblogs.com/omygod/archive/2007/08/31/876620.html Oracle 语句大全 1. Oracle安装完成后的初始口令?  ...

  9. IOS8 设置TableView Separatorinset 分割线从边框顶端开始

    IOS8 设置TableView Separatorinset 分割线从边框顶端开始   在ios8上 [TableViewsetSeparatorInset:UIEdgeInsetsMake(0,0 ...

  10. PHP系列笔记——Zend_Controller工作流程

    Zend_Controller_Front接收请求,然后调用Zend_Controller_Router_Rewrite来决定哪个控制器被派遣.为了在请求中设置控制器和动作名称,Zend_Contro ...