C# form-data上传图片流到远程服务器的详细代码
作者:玄之又玄众妙之门 发布时间:2022-06-12 01:39:58
先贴代码,后面做一些简单说明:
public static string sendPostHttpRequest_2(string url, byte[] postBytes, string contentType= "multipart/form-data; boundary=--------------------------71b23e4066ed")
{
string delimiter = "--------------------------71b23e4066ed";
string eol = Environment.NewLine;
string head = delimiter + eol
+ "Content-Disposition: form-data;piclen=" + postBytes.Length + eol
+ "Content-Type:image/jpeg" + "\r\n\r\n";
string foot = "\r\n" + delimiter + "--\r\n";
byte[] h_c = new ASCIIEncoding().GetBytes(head);
byte[] f_c = new ASCIIEncoding().GetBytes(foot);
WebRequest request = (WebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = contentType;
request.ContentLength = postBytes.Length+ h_c.Length+f_c.Length;
using (Stream outstream = request.GetRequestStream())
{
outstream.Write(h_c, 0, h_c.Length);//输出head
outstream.Write(postBytes, 0, postBytes.Length);//输出图片字节
outstream.Write(f_c, 0, f_c.Length);//输出尾部
}
string result = string.Empty;
using (WebResponse response = request.GetResponse())
{
if (response != null)
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
}
}
}
return result;
}
说明:
1)上面的代码中我的boundary=xxx是写死的,因为我对接的接口对方已经写死只获取这个分隔符.正常时候这里是会根据当前时间获取一个动态的字符串当做分隔符
2)输出的时候, outstream.Write 以前我的思路是先把参数拼接好以后直接一个输出就好了.结果拼接了好几个,发送出去以后对方都不能正常解析.最后在参考了一篇其他文章以后才恍然大悟.我可以分层次的输出呀.
备注:
下面放了一个很有启发的知识:
======================================开始
流:二进制
字节:无符号整数
字符:Unicode编码字符
字符串:多个Unicode编码字符
那么在.net下它们之间如何转化呢?
一般是遵守以下规则:
流->字节数组->字符数组->字符串
下面就来具体谈谈转化的语法
流->字节数组
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[ms.Length];
ms.Read(buffer, 0, (int)ms.Length);
字节数组->流
byte[] buffer = new byte[10];
MemoryStream ms = new MemoryStream(buffer);
字节数组->字符数组
1.
byte[] buffer = new byte[10];
char[] ch = new ASCIIEncoding().GetChars(buffer);
//或者:char[] ch = Encoding.UTF8.GetChars(buffer)
2.
byte[] buffer = new byte[10];
char[] ch = new char[10];
for(int i=0; i<buffer.Length; i++)
{
ch[i] = Convert.ToChar(buffer[i]);
}
字符数组->字节数组
1.
char[] ch = new char[10];
byte[] buffer = new ASCIIEncoding().GetBytes(ch);
//或者:byte[] buffer = Encoding.UTF8.GetBytes(ch)
2.
char[] ch = new char[10];
byte[] buffer = new byte[10];
for(int i=0; i<ch.Length; i++)
{
buffer[i] = Convert.ToByte(ch[i]);
}
字符数组->字符串
char[] ch = new char[10];
string str = new string(ch);
字符串->字符数组
string str = "abcde";
char[] ch=str .ToCharArray();
字节数组->字符串
byte[] buffer = new byte[10];
string str = System.Text.Encoding.UTF8.GetString(buffer);
//或者:string str = new ASCIIEncoding().GetString(buffer);
字符串->字节数组
string str = "abcde";
byte[] buffer=System.Text.Encoding.UTF8.GetBytes(str);
//或者:byte[] buffer= new ASCIIEncoding().GetBytes(str);
以上转的是 https://www.cnblogs.com/cc1120/p/9139454.html
======================================结束
在我的想法中,把所有的参数先转换为字符数组,然后拼接head,图片字节转换的字符数组,结束字符数组,然后把字符数组转换为字节进行发送.猜测应该是可行的,不过我自己在实际应用中是没有成功,可能是某一步转换格式的问题.因为项目要求太紧就没有继续尝试.
对了还有下面的一个知识点,有人知道是这样的吗?我是没有研究过不知道是不是.希望有大佬可以回答一下.
来源:https://www.cnblogs.com/sdjlq/p/16638092.html


猜你喜欢
- 使用Java生成图片验证码完全解析在 Java 中开发图片验证码功能,您可以使用 Java 图形处理库,比如 Java Advanced I
- 一、线程间的共享1.1 ynchronized内置锁用处Java支持多个线程同时访问一个对象或者对象的成员变量关键字synchronized
- 小米系统自带的长截屏应该很多人都用过,效果不错。当长截屏时listview就会自动滚动,当按下停止截屏时,就会得到一张完整的截屏。该篇就介绍
- 图片准备hole.png和slider.png为png是因为图片带有透明度。合成目标最终为前端生成两张图片:out_slider.png高度
- 这篇文章主要介绍了spring cloud alibaba Nacos 注册中心搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或
- 本文作者:Spring_ZYL文章来源:https://blog.csdn.net/gozhuyinglong版权声明:本文版权归作者所有,
- 情况一:配置文件,无法被导出或者生效修改前:修改后:究其原因,这是由于Maven的约定大于配置,导致我们写的配置文件,无法被导出或者生效的问
- @RequestBody与post请求的关系@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)
- 环境: idea2020.1插件: LeetCode-editor 6.7一、IDEA安装LeetCode插件安装完成重启idea打开插件U
- 写在前面本文讲解的是如何使用Spring动态配置文件,实现不同环境不同配置,灵活切换配置文件;以及讲述了如何使用 Maven 打包,然后上传
- 本文实例为大家分享了Android Studio实现简易进制转换计算器的具体代码,供大家参考,具体内容如下1、问题描述设计并实现一个数制转换
- 在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解。所以现在来总结Java异
- 前言2017 Google IO 大会,宣布将支持Kotlin作为开发语言。自此Kotlin成为了Android开发中的又一官方支持语言,当
- 本文实例汇总了C#中@的用法,对C#程序设计来说有不错的借鉴价值。具体如下:一 字符串中的用法1.学过C#的人都知道C# 中字符串常量可以以
- 加载本地图片在项目目录下创建assets文件夹,再在其文件夹下创建images文件夹,后面将需要的图片复制到其中即可在pubspec.yam
- 开发环境 android studio 3.0.1 已支持 kotlin1、定义接口interface CallBack{ fun call
- IntelliJ IDEA安装好以后,按说我们就要双击进行启动了,但在启动之前,我得给大家说一下IntelliJ IDEA安装以后的安装目录
- GUI全程是Graphical User Interface,即图形用户界面。顾名思义,GUI就是可以让用户直接操作的图形化界面,包括窗口、
- 本文实例为大家分享了java实现按层遍历二叉树,按层遍历二叉树可以通过队列来实现。其主要思路如下:1、先将根节点放入队列中2、每次都从队列中
- 1.MyBatisX插件在使用mybatis或者mybatis-plus时,我们可以安装IDEA的MyBatis的插件 - MyBatisX