C# WinForm調(diào)用net core實(shí)現(xiàn)文件上傳接口
winform調(diào)用API
private void button3_Click(object sender, EventArgs e) { var uriAddress = "https://localhost:44381/file/api/VoiceASRT/WavConvertFile"; //var uploadfilePath = "G:\\BaiduNetdiskDownload\\林俊杰 - 可惜沒如果.wav"; var uploadfilePath = "H:\\安裝步驟.txt"; //UploadFile(uriAddress, uploadfilePath); updateFile(uriAddress, uploadfilePath); } //測(cè)試OK /// <summary> /// 單個(gè)文件上傳至服務(wù)器 413是文件太大的錯(cuò),默認(rèn)應(yīng)該是大于4M就會(huì)報(bào)錯(cuò),要修改相關(guān)配置 /// public async Task<AjaxResult> WavConvertFile([FromForm] IFormFileCollection files) /// 文件上傳接口調(diào)用測(cè)試成功 /// </summary> /// <param name="uriAddress">接收文件資源的URI, 例如: http://xxxx/Upload.aspx</param> /// <param name="filePath">要發(fā)送的資源文件, 例如: @"D:\workspace\WebService 相關(guān).doc</param> /// <returns>返回文件保存的相對(duì)路徑, 例如: "upload/xxxxx.jpg" 或者出錯(cuò)返回 ""</returns> private string UploadFile(string uriAddress, string filePath) { //利用 WebClient System.Net.WebClient webClient = new System.Net.WebClient(); webClient.Credentials = System.Net.CredentialCache.DefaultCredentials; try { byte[] responseArray = webClient.UploadFile(uriAddress, "POST", filePath); string savePath = System.Text.Encoding.ASCII.GetString(responseArray); return savePath; } catch (Exception ex) { return ""; } } /// <summary> /// 測(cè)試OK /// public async Task<AjaxResult> WavConvertFile([FromForm] IFormFileCollection files) /// 文件上傳接口調(diào)用測(cè)試成功 /// </summary> /// <param name="url"></param> /// <param name="filePath"></param> public void updateFile(string url, string filePath) { try { string fileName_key_ = "kekename\\" + Path.GetFileName(filePath); string access_token = "fz434507768345eb7a8e97897"; byte[] fileContentByte = new byte[1024]; // 文件內(nèi)容二進(jìn)制 #region 將文件轉(zhuǎn)成二進(jìn)制 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); fileContentByte = new byte[fs.Length]; // 二進(jìn)制文件 fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length)); fs.Close(); #endregion #region 定義請(qǐng)求體中的內(nèi)容 并轉(zhuǎn)成二進(jìn)制 ********************************************************* 重點(diǎn) :拼接參數(shù) ******************************************************* string boundary = "ceshi"; string Enter = "\r\n"; //string modelIdStr = "--" + boundary + Enter // + "Content-Disposition: form-data; name=\"modelId\"" + Enter + Enter // + modelId + Enter; string fileContentStr = "--" + boundary + Enter + "Content-Type:application/octet-stream" + Enter + "Content-Disposition: form-data; name=\"file\"; filename=\"" + filePath + "\"" + Enter + Enter; string updateTimeStr = Enter + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"key\"" + Enter + Enter + fileName_key_; string encryptStr = Enter + "--" + boundary + Enter + "Content-Disposition: form-data; name=\"access_token\"" + Enter + Enter + access_token + Enter + "--" + boundary + "--"; // var modelIdStrByte = Encoding.UTF8.GetBytes(modelIdStr);//modelId所有字符串二進(jìn)制 var fileContentStrByte = Encoding.UTF8.GetBytes(fileContentStr);//fileContent一些名稱等信息的二進(jìn)制(不包含文件本身) var updateTimeStrByte = Encoding.UTF8.GetBytes(updateTimeStr);//updateTime所有字符串二進(jìn)制 var encryptStrByte = Encoding.UTF8.GetBytes(encryptStr);//encrypt所有字符串二進(jìn)制 #endregion ********************************************************* 重點(diǎn) :拼接參數(shù) ******************************************************* HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "multipart/form-data;boundary=" + boundary; Stream myRequestStream = request.GetRequestStream();//定義請(qǐng)求流 #region 將各個(gè)二進(jìn)制 安順序?qū)懭胝?qǐng)求流 modelIdStr -> (fileContentStr + fileContent) -> uodateTimeStr -> encryptStr // myRequestStream.Write(modelIdStrByte, 0, modelIdStrByte.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); #endregion HttpWebResponse response = (HttpWebResponse)request.GetResponse();//發(fā)送 Stream myResponseStream = response.GetResponseStream();//獲取返回值 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); JObject jo = (JObject)JsonConvert.DeserializeObject(retString); string Code = jo["code"].ToString(); string desc = jo["desc"].ToString(); string data = jo["data"].ToString(); JObject datajson = (JObject)JsonConvert.DeserializeObject(data); string file_url_ = datajson["file_url"].ToString(); //if (Code == "0") //{ // UpdateImgSerialInfo("5", file_url_); //} //else //{ // SalMessage.Error("上傳圖片失敗,接口返回:" + desc); //} } catch (Exception ex) { //SalMessage.Error("上傳圖片出錯(cuò):" + ex); } }
net core api 接口
/// <summary> /// Wav 文件轉(zhuǎn)寫 /// </summary> /// <param name="files"></param> /// <returns></returns> [HttpPost] public async Task<AjaxResult> WavConvertFile([FromForm] IFormFileCollection files) { try { if (files != null && files.Count > 0) { string fileName = files[0].Name; if (Path.GetExtension(fileName).Equals("wav")) { int MaxSize = int.Parse(LD.Code.ConfigurationManager.UpFileOptions["MaxSize"]); if (files[0].Length <= MaxSize)//檢查文件大小 { //&& Path.GetExtension(wavfile.Name).Equals("wav") if (_speechRecognizer != null) { // 從緩存中讀取wave數(shù)據(jù),并送去語音識(shí)別 //Stream waveMemStream = wavfile; string UploadFilePath = LD.Code.ConfigurationManager.UpFileOptions["UploadFilePath"]; string cdipath = Directory.GetCurrentDirectory(); string upfileDirePath = cdipath + UploadFilePath + "WavFiles\\" + fileName; using (FileStream fileStream = new System.IO.FileStream(upfileDirePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite, MaxSize)) { await files[0].CopyToAsync(fileStream); WaveData wav = SDK.ReadWaveDatas(fileStream); AsrtApiResponse rsp = await _speechRecognizer.RecogniteAsync(wav.byteWavs, wav.sampleRate, wav.channels, wav.byteWidth); AsrtResult result = new AsrtResult((string)rsp.Result, true, rsp.StatusCode, rsp.StatusMessage); LogFactory.GetLogger("WavConvert").Info("WavConvert 接口處理請(qǐng)求:" + fileName + "文件的轉(zhuǎn)寫結(jié)果:" + result.Text); return Success(result.Text, "轉(zhuǎn)寫成功"); } } else { return Error("ASRT 服務(wù)器API初始化失敗"); } } else { return Error("文件太大了"); } } else { return Error("語音文件類型錯(cuò)誤"); } } else { return Error("語音文件類型錯(cuò)誤"); } } catch (System.Exception ex) { LogFactory.GetLogger("LawcaseEvidenceUploadFileAsync").Info("報(bào)錯(cuò)" + ex.Message); return Error("轉(zhuǎn)寫報(bào)錯(cuò):" + ex.Message); } }
知識(shí)補(bǔ)充
除了上文的方法,小編還為大家整理了一些其他C# WinForm實(shí)現(xiàn)文件上傳功能的方法,希望對(duì)大家有所幫助
C# WinForm 文件上傳下載
/**/ /// <summary> /// WebClient上傳文件至服務(wù)器 /// </summary> /// <param name="localFilePath">文件名,全路徑格式</param> /// <param name="serverFolder">服務(wù)器文件夾路徑</param> /// <param name="reName">是否需要修改文件名,這里默認(rèn)是日期格式</param> /// <returns></returns> public static bool UploadFile( string localFilePath, string serverFolder, bool reName) ... { string fileNameExt, newFileName, uriString; if (reName) ...{ fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf(".") + 1); newFileName = DateTime.Now.ToString("yyMMddhhmmss") + fileNameExt; } else ...{ newFileName = localFilePath.Substring(localFilePath.LastIndexOf("")+1); } if (!serverFolder.EndsWith("/") && !serverFolder.EndsWith("")) ...{ serverFolder = serverFolder + "/"; } uriString = serverFolder + newFileName; //服務(wù)器保存路徑 /**//// 創(chuàng)建WebClient實(shí)例 WebClient myWebClient = new WebClient(); myWebClient.Credentials = CredentialCache.DefaultCredentials; // 要上傳的文件 FileStream fs = new FileStream(newFileName, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); try ...{ //使用UploadFile方法可以用下面的格式 //myWebClient.UploadFile(uriString,"PUT",localFilePath); byte[] postArray = r.ReadBytes((int)fs.Length); Stream postStream = myWebClient.OpenWrite(uriString, "PUT"); if (postStream.CanWrite) ...{ postStream.Write(postArray, 0, postArray.Length); } else ...{ MessageBox.Show("文件目前不可寫!"); } postStream.Close(); } catch ...{ //MessageBox.Show("文件上傳失敗,請(qǐng)稍候重試~"); return false; } return true; } /**/ /// <summary> /// 下載服務(wù)器文件至客戶端 /// </summary> /// <param name="uri">被下載的文件地址</param> /// <param name="savePath">另存放的目錄</param> public static bool Download( string uri, string savePath) ... { string fileName; //被下載的文件名 if (uri.IndexOf("") > -1) ...{ fileName = uri.Substring(uri.LastIndexOf("") + 1); } else ...{ fileName = uri.Substring(uri.LastIndexOf("/") + 1); } if (!savePath.EndsWith("/") && !savePath.EndsWith("")) ...{ savePath = savePath + "/"; } savePath += fileName; //另存為的絕對(duì)路徑+文件名 WebClient client = new WebClient(); try ...{ client.DownloadFile(uri, savePath); } catch ...{ return false; } return true; }
到此這篇關(guān)于C# WinForm調(diào)用net core實(shí)現(xiàn)文件上傳接口的文章就介紹到這了,更多相關(guān)C#文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c# openxml 刪除xlsx、xls的外鏈?zhǔn)纠a
要?jiǎng)h除一個(gè) Excel 文件(.xlsx)中的外部鏈接(external links),你可以使用 OpenXML SDK,本文演示如何使用 OpenXML SDK 刪除外部鏈接,感興趣的朋友一起看看吧2024-01-01WCF基礎(chǔ)介紹并創(chuàng)建簡(jiǎn)單應(yīng)用程序
這篇文章介紹了WCF基礎(chǔ)并創(chuàng)建簡(jiǎn)單WCF應(yīng)用程序,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01實(shí)例詳解C#實(shí)現(xiàn)http不同方法的請(qǐng)求
本篇文章給大家分享了C#實(shí)現(xiàn)http不同方法的請(qǐng)求的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,有需要的朋友參考下。2018-07-07淺析WPF中Binding的數(shù)據(jù)校驗(yàn)和類型轉(zhuǎn)換
在WPF開發(fā)中,Binding實(shí)現(xiàn)了數(shù)據(jù)在Source和Target之間的傳遞和流通,那在WPF開發(fā)中,如何實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)和類型轉(zhuǎn)換呢,下面就跟隨小編一起學(xué)習(xí)一下吧2024-03-03C#通過配置文件動(dòng)態(tài)修改web.config內(nèi)容的操作步驟
這篇文章主要介紹了C#通過配置文件動(dòng)態(tài)修改web.config內(nèi)容的操作步驟,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03使用Deflate算法對(duì)文件進(jìn)行壓縮與解壓縮的方法詳解
本篇文章是對(duì)使用Deflate算法對(duì)文件進(jìn)行壓縮和解壓縮的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06C#創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)
本文主要對(duì)存儲(chǔ)結(jié)構(gòu)字典(Dictionary)的一些常用方法進(jìn)行簡(jiǎn)單的說明,并闡述了如何創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)。希望對(duì)大家有所幫助2016-12-12C#實(shí)現(xiàn)List.Sort()使用小計(jì)
在C#開發(fā)中,List是常見的一種集合類型,其提供了一個(gè) Sort() 方法來實(shí)現(xiàn)對(duì)集合的排序,本文主要介紹了C#實(shí)現(xiàn)List.Sort()使用小計(jì),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12