|
@@ -1,8 +1,11 @@
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.IO;
|
|
|
using System.Linq;
|
|
|
+using System.Net;
|
|
|
using System.Security.Cryptography;
|
|
|
using System.Text;
|
|
|
+using Aop.Api.Util;
|
|
|
using Library;
|
|
|
|
|
|
namespace MySystem
|
|
@@ -59,6 +62,120 @@ namespace MySystem
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ #region 上传图片接口
|
|
|
+ /// <summary>
|
|
|
+ /// 执行带文件上传的HTTP POST请求。
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="url">请求地址</param>
|
|
|
+ /// <param name="textParams">请求文本参数</param>
|
|
|
+ /// <param name="fileParams">请求文件参数</param>
|
|
|
+ /// <param name="charset">编码字符集</param>
|
|
|
+ /// <returns>HTTP响应</returns>
|
|
|
+ public string DoPost(string url, string token, IDictionary<string, string> textParams, IDictionary<string, FileItem> fileParams, string charset = "utf-8")
|
|
|
+ {
|
|
|
+ // 如果没有文件参数,则走普通POST请求
|
|
|
+ if (fileParams == null || fileParams.Count == 0)
|
|
|
+ {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
|
|
|
+
|
|
|
+ HttpWebRequest req = GetWebRequest(url, "POST");
|
|
|
+ req.Headers.Add("X-File-Token", token);
|
|
|
+ req.ContentType = "multipart/form-data;charset=" + charset + ";boundary=" + boundary;
|
|
|
+
|
|
|
+ Stream reqStream = req.GetRequestStream();
|
|
|
+ byte[] itemBoundaryBytes = Encoding.GetEncoding(charset).GetBytes("\r\n--" + boundary + "\r\n");
|
|
|
+ byte[] endBoundaryBytes = Encoding.GetEncoding(charset).GetBytes("\r\n--" + boundary + "--\r\n");
|
|
|
+
|
|
|
+ // 组装文本请求参数
|
|
|
+ string textTemplate = "Content-Disposition:form-data;name=\"{0}\"\r\nContent-Type:text/plain\r\n\r\n{1}";
|
|
|
+ IEnumerator<KeyValuePair<string, string>> textEnum = textParams.GetEnumerator();
|
|
|
+ while (textEnum.MoveNext())
|
|
|
+ {
|
|
|
+ string textEntry = string.Format(textTemplate, textEnum.Current.Key, textEnum.Current.Value);
|
|
|
+ byte[] itemBytes = Encoding.GetEncoding(charset).GetBytes(textEntry);
|
|
|
+ reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
|
|
|
+ reqStream.Write(itemBytes, 0, itemBytes.Length);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 组装文件请求参数
|
|
|
+ string fileTemplate = "Content-Disposition:form-data;name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";
|
|
|
+ IEnumerator<KeyValuePair<string, FileItem>> fileEnum = fileParams.GetEnumerator();
|
|
|
+ while (fileEnum.MoveNext())
|
|
|
+ {
|
|
|
+ string key = fileEnum.Current.Key;
|
|
|
+ FileItem fileItem = fileEnum.Current.Value;
|
|
|
+ string fileEntry = string.Format(fileTemplate, key, fileItem.GetFileName(), fileItem.GetMimeType());
|
|
|
+ byte[] itemBytes = Encoding.GetEncoding(charset).GetBytes(fileEntry);
|
|
|
+ reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
|
|
|
+ reqStream.Write(itemBytes, 0, itemBytes.Length);
|
|
|
+
|
|
|
+ byte[] fileBytes = fileItem.GetContent();
|
|
|
+ reqStream.Write(fileBytes, 0, fileBytes.Length);
|
|
|
+ }
|
|
|
+
|
|
|
+ reqStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
|
|
|
+ reqStream.Close();
|
|
|
+
|
|
|
+ HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
|
|
|
+ Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
|
|
|
+ return GetResponseAsString(rsp, encoding);
|
|
|
+ }
|
|
|
+
|
|
|
+ public HttpWebRequest GetWebRequest(string url, string method)
|
|
|
+ {
|
|
|
+ HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
|
|
|
+ req.ServicePoint.Expect100Continue = false;
|
|
|
+ req.Method = method;
|
|
|
+ req.KeepAlive = true;
|
|
|
+ req.Timeout = 100000;
|
|
|
+ return req;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 把响应流转换为文本。
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="rsp">响应流对象</param>
|
|
|
+ /// <param name="encoding">编码方式</param>
|
|
|
+ /// <returns>响应文本</returns>
|
|
|
+ public string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
|
|
|
+ {
|
|
|
+ StringBuilder result = new StringBuilder();
|
|
|
+ Stream stream = null;
|
|
|
+ StreamReader reader = null;
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ // 以字符流的方式读取HTTP响应
|
|
|
+ stream = rsp.GetResponseStream();
|
|
|
+ reader = new StreamReader(stream, encoding);
|
|
|
+
|
|
|
+ // 按字符读取并写入字符串缓冲
|
|
|
+ int ch = -1;
|
|
|
+ while ((ch = reader.Read()) > -1)
|
|
|
+ {
|
|
|
+ // 过滤结束符
|
|
|
+ char c = (char)ch;
|
|
|
+ if (c != '\0')
|
|
|
+ {
|
|
|
+ result.Append(c);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ // 释放资源
|
|
|
+ if (reader != null) reader.Close();
|
|
|
+ if (stream != null) stream.Close();
|
|
|
+ if (rsp != null) rsp.Close();
|
|
|
+ }
|
|
|
+
|
|
|
+ return result.ToString();
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
public Dictionary<string, string> GetHeader(Dictionary<string, object> reqdic)
|
|
|
{
|
|
|
Dictionary<string, string> headdic = new Dictionary<string, string>();
|