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);
}
//測試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)用測試成功
/// </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>
/// 測試OK
/// public async Task<AjaxResult> WavConvertFile([FromForm] IFormFileCollection files)
/// 文件上傳接口調(diào)用測試成功
/// </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-01
WCF基礎(chǔ)介紹并創(chuàng)建簡單應(yīng)用程序
這篇文章介紹了WCF基礎(chǔ)并創(chuàng)建簡單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-03
C#通過配置文件動(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-06
C#創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)
本文主要對(duì)存儲(chǔ)結(jié)構(gòu)字典(Dictionary)的一些常用方法進(jìn)行簡單的說明,并闡述了如何創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)。希望對(duì)大家有所幫助2016-12-12
C#實(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

