POST 方式上传图片
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 方式上传图片的更多相关文章
- OSS web直传 ajax方式 上传图片、文件
部分js代码 send_request = function(){//这是从后台获取认证策略等信息. var htmlobj=$.ajax({url:root+"/service/polic ...
- 010-java 表单方式或者base64方式上传图片,后端使用nutz的post转发图片到另一个请求
本地上传图片 方式一.使用表单方式上传-enctype <form enctype="multipart/form-data" method="post" ...
- ajax方式上传图片到Django后台
参考价值最大 https://blog.csdn.net/huangql517/article/details/81259671 https://www.cnblogs.com/chenjianhon ...
- 使用base64转码的方式上传图片
1.前端html代码 <input style="width:100%" onchange="loadpicture(1)" type="fil ...
- django 的 ajax 方式上传图片
页面代码: <html> <!-- 引入相关的js文件,相对路径 --> <script type="text/javascript" ...
- MVC 使用AJAX POST上传图片的方式
我们来总结一下使用AJAX以POST方式上传图片的方法. 一.普遍的一种是以file的格式请求.在Request.Files中获取文件. public ActionResult UploadFile( ...
- 部分安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
前端JS中使用XMLHttpRequest 2上传图片到服务器,PC端和大部分手机上都正常,但在少部分安卓手机上上传失败,服务器上查看图片,显示字节数为0.下面是上传图片的核心代码: HTML < ...
- 在linux下使用百度ueditor编辑器上传图片
百度ueditor编辑器虽然强大,但是也有不足的地方.如果对ueditor流程不是很熟悉可以说走的弯路比较多,费力不讨好.下面呢,就是要解决ueditor遇到的问题. 用ueditor上传图片遇到的问 ...
- 通过Canvas及File API缩放并上传图片
原文地址:Resize an Image Using Canvas, Drag and Drop and the File API 示例地址:Canvas Resize Demo 原文作者:Dr. T ...
随机推荐
- Oracle inner join、left join、right join 、+左边或者右边的区别
我们以Oracle自带的表来做例子 主要两张表:dept.emp 一个是部门,一个是员工表结构如下: emp name null? Type Empno not null number(4) enam ...
- linux修改文本模式下的分辨率(CentOS6.4)
root登录 vi /boot/grub/menu.lst 看到如下界面: 红框全出位置为分辨率设置,设置参数如下: 保存 shutdown -r now
- Oracle当前用户SQL
select sesion.sid,sesion.serial#,sesion.username,sesion.sql_id,sesion.sql_child_number,optimizer_mod ...
- MojoliciousLite: 实时的web框架 概述
MojoliciousLite: 实时的web框架: SYNOPSIS 简介: # Automatically enables "strict", "warnings&q ...
- Coursera机器学习课程(2016 )错题集
Unit 4 Neural Networks (×) 分析:估计D项错误,因为神经网络在处理逻辑运算的时候是range(0,1),但是处理别的运算的时候就不是这个范围了 (√) (对) week 6 ...
- 字符串匹配——Brute-Force 简单匹配算法
下面几篇文章记录字符串匹配算法. Brute-Force算法简称BF算法,中文名叫简单匹配算法.正如其名,简单粗暴,按部就班地遍历所有字符,算法简单,效率低下,不被看好. 但也正因为不常用,反而容易生 ...
- nova的 microversion 实现
之前想写nova的policy的实现, 但是发现网上,有人写的很不错了. 但是个人认为存在一些问题. ref: http://www.cnblogs.com/shaohef/p/4527436.htm ...
- 限制div高度当内容多了溢出时显示滚动条
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"content= ...
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...
- iOS 常用第三方
MWPhotoBrowser 非常好用的图片浏览器 FDFullscreenPopGesture 用于全屏滑动切换视图 Aspects 用于快速AOP编程 AFNetworking iOS开发中最为火 ...