1. 程式人生 > 實用技巧 >C# 後臺實現一次上傳多個檔案(資料對接到其他平臺)

C# 後臺實現一次上傳多個檔案(資料對接到其他平臺)

 string result="";   
 string urlUploadMultiFile = "http://127.0.0.1:8090/overload/uploaddata.action";//上傳地址
 //賦值
 infoData.id="123";
 infoData.name= "張三";
 infoData.date= "2020-10-20 15:50:00";
string jsonParam = JsonConvert.SerializeObject(infoData); List<string> fileLst = new List<string>(); fileLst.Add(
"1.jpg"); fileLst.Add("2.jpg"); fileLst.Add("3.jpg"); fileLst.Add(z"4vedio.mp4"); string[] filesArray = fileLst.ToArray();//strArray=[str0,str1,str2]//轉陣列 //呼叫 if (UploadMultiFile(urlUploadMultiFile, jsonParam, filesArray, "application/octet-stream", "file") > 0) {       result="成功"; }

上傳方法

      /// <summary>
        /// 多檔案上傳
        /// </summary>
        /// <param name="url">請求路徑</param>
        /// <param name="jsonParam">資料</param>
        /// <param name="files">圖片路徑</param>
        /// <param name="contentType"></param>
        /// <param name="paramFileName">
對應的圖片欄位</param> /// <returns></returns> public static int UploadMultiFile(string url, string jsonParam, string[] files, string contentType, string paramFileName) { int result = -1; if (files.Length <= 0) return result; Dictionary<string, string> nvc = new Dictionary<string, string>(); nvc.Add("queryParam", jsonParam); string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");//邊界符 byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");//開始邊界符 HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url); wr.ContentType = "multipart/form-data; boundary=" + boundary; wr.Method = "POST"; wr.KeepAlive = true; wr.Credentials = System.Net.CredentialCache.DefaultCredentials; Stream rs = wr.GetRequestStream(); string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; foreach (string key in nvc.Keys) { rs.Write(boundarybytes, 0, boundarybytes.Length);//寫入邊界符 string formitem = string.Format(formdataTemplate, key, nvc[key]); byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); rs.Write(formitembytes, 0, formitembytes.Length);//寫入資料 } rs.Write(boundarybytes, 0, boundarybytes.Length);//寫入邊界符 byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); for (int k = 0, k2 = files.Length; k < k2; k++) { string fname = paramFileName; string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; string header = string.Format(headerTemplate, fname, files[k], contentType);//寫入字串 byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); rs.Write(headerbytes, 0, headerbytes.Length);//寫入檔案 FileStream fileStream = new FileStream(files[k], FileMode.Open, FileAccess.Read); byte[] buffer = new byte[4096]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { rs.Write(buffer, 0, bytesRead); } fileStream.Close(); if (k < k2 - 1) rs.Write(boundarybytes, 0, boundarybytes.Length); } rs.Write(trailer, 0, trailer.Length); rs.Close(); WebResponse wresp = null; try { wresp = wr.GetResponse(); Stream stream2 = wresp.GetResponseStream(); StreamReader reader2 = new StreamReader(stream2); JObject resultJson = (JObject)JsonConvert.DeserializeObject(reader2.ReadToEnd()); if (resultJson.Property("message") != null && resultJson["message"].ToString() == "操作成功") { result = 1; SysCfg.WriteLog("result:" + resultJson, false); } //result = reader2.ReadToEnd(); } catch (Exception ex) { if (wresp != null) { wresp.Close(); wresp = null; } SysCfg.WriteLog("UploadMultiFile,ex:" + ex.Message); result = -1; } finally { wr = null; } return result; }