C#post調用接口並上傳文件

/// <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); }

相關文章
相關標籤/搜索