using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2.selectSDF.http
{
class Uploadzip
{
static void Main(string[] args) {
string Upload_Url = "http://device.js.cn/rest?method=zh,grabbinglog";
int timeOut = 30000;
string ZipedFile= "D:/Project/启动文件.jpg";
Dictionary<string, string> myCol = new Dictionary<string, string>();
myCol.Add("00000000", "xxxxxxxx");
myCol.Add("commandId", "xxxxx");
myCol.Add("deviceSn", "xxxxxxxx");
//文件地址,响应时间,file,文件路径,传输数据
HttpPostData(Upload_Url, timeOut, "file", ZipedFile, myCol);
}
/// <summary>
/// 文件上传及数据传输
/// </summary>
/// <param name="url"> 访问的服务器地址及接口</param>
/// <param name="timeOut">设置请求超时时间</param>
/// <param name="fileKeyName">file</param>
/// <param name="filePath">文件上传的本地路径</param>
/// <param name="list">传输的json数据</param>
/// <returns></returns>
public static string HttpPostData(string url, int timeOut, string fileKeyName, string filePath, Dictionary<string, string> list)
{
string responseContent;
var memStream = new MemoryStream();
var webRequest = (HttpWebRequest)WebRequest.Create(url);
// 边界符
var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
// 边界符
var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
// 最后的结束符
var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");
// 设置属性
webRequest.Method = "POST";
webRequest.Timeout = timeOut;
webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
// 写入文件----------1.--------------
string filename = filePath.Substring(filePath.LastIndexOf("/")+ 1);
string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=" + filename + "\r\n" + "Content-Type: application/octet-stream\r\n\r\n";
var header = string.Format(filePartHeader, fileKeyName, filePath);
var headerbytes = Encoding.UTF8.GetBytes(header);
memStream.Write(beginBoundary, 0, beginBoundary.Length);
memStream.Write(headerbytes, 0, headerbytes.Length);
var buffer = new byte[1024];
int bytesRead; // =0
while((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
string stringKeyHeader = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";
foreach (var item in list)
{ //----------- 传输数据的编码集。
var dataByte = Encoding.UTF8.GetBytes(string.Format(stringKeyHeader, item.Key, item.Value));
memStream.Write(dataByte, 0, dataByte.Length);//循环写入 参数
}
// 写入最后的结束边界符------------ 3.-------------------------
memStream.Write(endBoundary, 0, endBoundary.Length);
webRequest.ContentLength = memStream.Length;
var requestStream = webRequest.GetRequestStream();
memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close();
//响应 ------------------- 4.-----------------------------------
var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8")) )
{
responseContent = httpStreamReader.ReadToEnd();
}
fileStream.Close();
httpWebResponse.Close();
webRequest.Abort();
return responseContent;
}
}
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2.selectSDF.http
{
class Uploadzip
{
static void Main(string[] args) {
string Upload_Url = "http://device.js.cn/rest?method=zh,grabbinglog";
int timeOut = 30000;
string ZipedFile= "D:/Project/启动文件.jpg";
Dictionary<string, string> myCol = new Dictionary<string, string>();
myCol.Add("00000000", "xxxxxxxx");
myCol.Add("commandId", "xxxxx");
myCol.Add("deviceSn", "xxxxxxxx");
//文件地址,响应时间,file,文件路径,传输数据
HttpPostData(Upload_Url, timeOut, "file", ZipedFile, myCol);
}
/// <summary>
/// 文件上传及数据传输
/// </summary>
/// <param name="url"> 访问的服务器地址及接口</param>
/// <param name="timeOut">设置请求超时时间</param>
/// <param name="fileKeyName">file</param>
/// <param name="filePath">文件上传的本地路径</param>
/// <param name="list">传输的json数据</param>
/// <returns></returns>
public static string HttpPostData(string url, int timeOut, string fileKeyName, string filePath, Dictionary<string, string> list)
{
string responseContent;
var memStream = new MemoryStream();
var webRequest = (HttpWebRequest)WebRequest.Create(url);
// 边界符
var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
// 边界符
var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
// 最后的结束符
var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");
// 设置属性
webRequest.Method = "POST";
webRequest.Timeout = timeOut;
webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
// 写入文件----------1.--------------
string filename = filePath.Substring(filePath.LastIndexOf("/")+ 1);
string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=" + filename + "\r\n" + "Content-Type: application/octet-stream\r\n\r\n";
var header = string.Format(filePartHeader, fileKeyName, filePath);
var headerbytes = Encoding.UTF8.GetBytes(header);
memStream.Write(beginBoundary, 0, beginBoundary.Length);
memStream.Write(headerbytes, 0, headerbytes.Length);
var buffer = new byte[1024];
int bytesRead; // =0
while((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
string stringKeyHeader = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";
foreach (var item in list)
{ //----------- 传输数据的编码集。
var dataByte = Encoding.UTF8.GetBytes(string.Format(stringKeyHeader, item.Key, item.Value));
memStream.Write(dataByte, 0, dataByte.Length);//循环写入 参数
}
// 写入最后的结束边界符------------ 3.-------------------------
memStream.Write(endBoundary, 0, endBoundary.Length);
webRequest.ContentLength = memStream.Length;
var requestStream = webRequest.GetRequestStream();
memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close();
//响应 ------------------- 4.-----------------------------------
var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("utf-8")) )
{
responseContent = httpStreamReader.ReadToEnd();
}
fileStream.Close();
httpWebResponse.Close();
webRequest.Abort();
return responseContent;
}
}
}