/// <summary>
/// C#調用接口上傳json數據,而且帶文件上傳
/// </summary>
/// <param name="url">接口地址</param>
/// <param name="filePath">文件路徑</param>
/// <returns></returns>
public string RequestPost(string url, string filePath)
{
//string filePath = AppDomain.CurrentDomain.BaseDirectory + "CountData"; + aa.txt
string campaignId = "123";
string mailingId = "567";
string plateForm = "cn";json
string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
// E:\WEB\K11SH郵件服務V4-WP\WinServe\WinServe\bin\Debug\CountData\K11_hard_bounce.csv.gpg
//string filePath = AppDomain.CurrentDomain.BaseDirectory + "CountData" + Path.DirectorySeparatorChar.ToString() + Path.GetFileName("K11_hard_bounce.csv.gpg"); app
byte[] fileContentByte = new byte[1024]; // 文件內容二進制加密
#region 將文件轉成二進制url
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
fileContentByte = new byte[fs.Length]; // 二進制文件
fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
fs.Close();code
#endregionorm
#region 定義請求體中的內容 並轉成二進制接口
string boundary = "ceshi";
string Enter = "\r\n";
string campaignIDStr = "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"campaignId\"" + Enter + Enter
+ campaignId + Enter;
string fileContentStr = "--" + boundary + Enter
+ "Content-Type:application/octet-stream" + Enter
+ "Content-Disposition: form-data; name=\"gnupgFile\"; filename=\"" + fileName + "\"" + Enter + Enter;
string updateTimeStr = Enter + "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"mailingId\"" + Enter + Enter
+ mailingId;
string encryptStr = Enter + "--" + boundary + Enter
+ "Content-Disposition: form-data; name=\"plateForm\"" + Enter + Enter
+ plateForm + Enter + "--" + boundary + "--";ip
byte[] campaignIDStrByte = Encoding.UTF8.GetBytes(campaignIDStr);//modelId全部字符串二進制
byte[] fileContentStrByte = Encoding.UTF8.GetBytes(fileContentStr);//fileContent一些名稱等信息的二進制(不包含文件自己)
byte[] updateTimeStrByte = Encoding.UTF8.GetBytes(updateTimeStr);//updateTime全部字符串二進制
byte[] encryptStrByte = Encoding.UTF8.GetBytes(encryptStr);//encrypt全部字符串二進制
#endregionutf-8
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data;boundary=" + boundary;字符串
using (Stream myRequestStream = request.GetRequestStream())//定義請求流
{
//將各個二進制 安順序寫入請求流 modelIdStr -> (fileContentStr + fileContent) -> uodateTimeStr -> encryptStr
myRequestStream.Write(campaignIDStrByte, 0, campaignIDStrByte.Length);
myRequestStream.Write(fileContentStrByte, 0, fileContentStrByte.Length);
myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);
myRequestStream.Write(updateTimeStrByte, 0, updateTimeStrByte.Length);
myRequestStream.Write(encryptStrByte, 0, encryptStrByte.Length);
}
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//發送
Stream myResponseStream = response.GetResponseStream();//獲取返回值
using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")))
{
string retString = UnicodeToString(myStreamReader.ReadToEnd());
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
}catch(Exception e)
{
Log.AppendError("上傳加密文件失敗"+fileName +" :"+e.Message);
return "";
}
}
private string UnicodeToString(string srcText) { return Regex.Unescape(srcText); }