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. javascript - 工作笔记 (事件绑定)

    背景: 目前所做的项目,只能使用的是原生的javascript.对于javascript的事件绑定想必大家都懂得语法: 1,在标签中使用属性调用方法:<div onclick="AAA ...

  2. TLC是什么

    TLC = Triple-Level Cell,即3bit/cell,它的寿命短,速度慢,约500-5000次擦写寿命. 现在U盘多为MLC,TLC也有一部分,将来TLC会占大部分市场. 一种名为TL ...

  3. Microsoft Office 2010 Pro VOL简体中文正式版

    网友们期待的Microsoft Office Professional Plus 2010 VOL简体中文正式版.所谓的“VOL”,即是Volume Licensing for Organizatio ...

  4. Unix/Linux环境C编程入门教程(2) CentOS环境搭建

    Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 本文就带大家来安装CentOS并且配置好C/C++开发环境,这是一款Linux. ...

  5. NOI2011 Day1

    NOI2011 Day1 兔农 题目描述:\(fib[1]=fib[2]=1, fib[i]=fib[i-2]+fib[i-1] (i\geq 3)\),若\(fib[i] \equiv 1(mod ...

  6. [LeetCode][Python]Tow Sum

    # -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/two-sum/ Given an array of integers, find ...

  7. Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn

    这个异常我在网上查看了很多资料,一般都说是hibernate的session问题,让重新两个方法,但是我以前用的时候没问题啊,所以一直找问题,终于这个bug让我找到了,就是因为我插入操作的时候用的是别 ...

  8. C++一维数组和指针的关系总结

    对于数组int a[10]; a表示数组的第一个元素的地址,即&a[0]; 如果使指针p,指向数组的首元素,可以进行操作: int * p=a; 或者 int *p=&a[0]; 那么 ...

  9. struts2中从数据库中读取数据,并在JSP页面中遍历保存有JavaBean对象的List对象

    0x1:前言 前面搭建struts就不说了,大家都能成功完毕. 0x2:Model 这里我们须要一个Model类来接收 <span style="font-size:10px;font ...

  10. 前端新人学习笔记-------html/css/js基础知识点

    即将毕业的软件工程大学生一枚,秋季招聘应聘的是Android,今年来到公司实习,要求做前端开发,所以一切只有现学,现在根据视频来学习,然后开这个博客记录一下自己的学习过程,废话不多说,开写. 4月6日 ...