using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Net;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace IStation.Untity
|
{
|
/// <summary>
|
/// http文件辅助类
|
/// </summary>
|
public class HttpFileHelper
|
{
|
/// <summary>
|
/// 上传文件
|
/// </summary>
|
public static string Upload(string url, string filePath)
|
{
|
if (string.IsNullOrEmpty(url))
|
return default;
|
if (string.IsNullOrEmpty(filePath))
|
return default;
|
if (!System.IO.File.Exists(filePath))
|
return default;
|
try
|
{
|
var fileInfo = new System.IO.FileInfo(filePath);
|
string boundary = "----" + DateTime.Now.Ticks.ToString("x");// 边界符
|
byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n"); // 边界符开始。【☆】右侧必须要有 \r\n 。
|
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 边界符结束。【☆】两侧必须要有 --\r\n 。
|
|
var fileFormTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";//文件模板
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
|
request.Method = WebRequestMethods.Http.Post;
|
request.AllowWriteStreamBuffering = false;
|
//request.KeepAlive = true;
|
request.Timeout = -1;
|
|
long contentLength = 0;
|
|
var fileFormItem = string.Format(fileFormTemplate, "file", fileInfo.Extension);
|
byte[] fileFormItemBytes = Encoding.UTF8.GetBytes(fileFormItem);
|
contentLength += beginBoundaryBytes.Length;
|
contentLength += fileFormItemBytes.Length;
|
|
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
contentLength += fileStream.Length;
|
contentLength += endBoundaryBytes.Length;
|
request.ContentLength = contentLength;
|
var requestStream = request.GetRequestStream();
|
requestStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length);
|
requestStream.Write(fileFormItemBytes, 0, fileFormItemBytes.Length);
|
|
//每次上传4M
|
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
|
int bytesRead = 0;
|
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
|
{
|
requestStream.Write(buffer, 0, bytesRead);
|
}
|
requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
|
|
fileStream.Close();
|
requestStream.Close();
|
|
var response = request.GetResponse();
|
string responsetext = string.Empty;
|
using (Stream stream = response.GetResponseStream())
|
using (StreamReader reader = new StreamReader(stream))
|
{
|
responsetext = reader.ReadToEnd();
|
}
|
return responsetext;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 文件上传
|
/// </summary>
|
public static string Upload(string url, Stream stream, string suffix)
|
{
|
if (string.IsNullOrEmpty(url))
|
return default;
|
if (stream == null)
|
return default;
|
try
|
{
|
string boundary = "----" + DateTime.Now.Ticks.ToString("x");// 边界符
|
byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n"); // 边界符开始。【☆】右侧必须要有 \r\n 。
|
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 边界符结束。【☆】两侧必须要有 --\r\n 。
|
|
var fileFormTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";//文件模板
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
|
request.Method = WebRequestMethods.Http.Post;
|
request.AllowWriteStreamBuffering = false;
|
//request.KeepAlive = true;
|
request.Timeout = -1;
|
|
long contentLength = 0;
|
|
var fileFormItem = string.Format(fileFormTemplate, "file", suffix);
|
byte[] fileFormItemBytes = Encoding.UTF8.GetBytes(fileFormItem);
|
|
contentLength += beginBoundaryBytes.Length;
|
contentLength += fileFormItemBytes.Length;
|
//var fileStream = new FileStream(steam, FileMode.Open, FileAccess.Read);
|
|
contentLength += stream.Length;
|
contentLength += endBoundaryBytes.Length;
|
request.ContentLength = contentLength;
|
var requestStream = request.GetRequestStream();
|
requestStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length);
|
requestStream.Write(fileFormItemBytes, 0, fileFormItemBytes.Length);
|
|
//每次上传4M
|
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)stream.Length))];
|
int bytesRead = 0;
|
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
|
{
|
requestStream.Write(buffer, 0, bytesRead);
|
}
|
requestStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
|
|
stream.Close();
|
requestStream.Close();
|
|
var response = request.GetResponse();
|
string responsetext = string.Empty;
|
using (Stream rs = response.GetResponseStream())
|
using (StreamReader reader = new StreamReader(rs))
|
{
|
responsetext = reader.ReadToEnd();
|
}
|
return responsetext;
|
}
|
catch (System.Exception ex)
|
{
|
throw ex;
|
}
|
|
}
|
|
/// <summary>
|
/// 下载文件
|
/// </summary>
|
public static Stream Download(string url)
|
{
|
var request = (HttpWebRequest)WebRequest.Create(url);
|
request.Method = "GET";
|
request.ContentType = "application/json";
|
//request.Timeout = 10 * 1000;//请求超时时间
|
using (var response = (HttpWebResponse)request.GetResponse())
|
{
|
if (response.StatusCode == HttpStatusCode.NoContent)
|
return null;
|
var ms = new MemoryStream();
|
response.GetResponseStream().CopyTo(ms);
|
return ms;
|
}
|
}
|
|
/// <summary>
|
/// 下载文件
|
/// </summary>
|
public static void DownloadUri(string uri, string filePath)
|
{
|
var client = new System.Net.WebClient();
|
client.DownloadFile(uri, filePath);
|
}
|
|
}
|
}
|