免费资源网 – https://freexyz.cn/
winform调用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>
/// 单个文件上传至服务器 413是文件太大的错,默认应该是大于4M就会报错,要修改相关配置
/// public async Task<AjaxResult> WavConvertFile([FromForm] IFormFileCollection files)
/// 文件上传接口调用测试成功
/// </summary>
/// <param name="uriAddress">接收文件资源的URI, 例如: http://xxxx/Upload.aspx</param>
/// <param name="filePath">要发送的资源文件, 例如: @"D:\workspace\WebService 相关.doc</param>
/// <returns>返回文件保存的相对路径, 例如: "upload/xxxxx.jpg" 或者出错返回 ""</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)
/// 文件上传接口调用测试成功
/// </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]; // 文件内容二进制
#region 将文件转成二进制
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
fileContentByte = new byte[fs.Length]; // 二进制文件
fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
fs.Close();
#endregion
#region 定义请求体中的内容 并转成二进制 ********************************************************* 重点 :拼接参数 *******************************************************
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所有字符串二进制
var fileContentStrByte = Encoding.UTF8.GetBytes(fileContentStr);//fileContent一些名称等信息的二进制(不包含文件本身)
var updateTimeStrByte = Encoding.UTF8.GetBytes(updateTimeStr);//updateTime所有字符串二进制
var encryptStrByte = Encoding.UTF8.GetBytes(encryptStr);//encrypt所有字符串二进制
#endregion ********************************************************* 重点 :拼接参数 *******************************************************
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data;boundary=" + boundary;
Stream myRequestStream = request.GetRequestStream();//定义请求流
#region 将各个二进制 安顺序写入请求流 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();//发送
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("上传图片出错:" + ex);
}
}
net core api 接口
/// <summary>
/// Wav 文件转写
/// </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数据,并送去语音识别
//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 接口处理请求:" + fileName + "文件的转写结果:" + result.Text);
return Success(result.Text, "转写成功");
}
}
else
{
return Error("ASRT 服务器API初始化失败");
}
}
else
{
return Error("文件太大了");
}
}
else
{
return Error("语音文件类型错误");
}
}
else
{
return Error("语音文件类型错误");
}
}
catch (System.Exception ex)
{
LogFactory.GetLogger("LawcaseEvidenceUploadFileAsync").Info("报错" + ex.Message);
return Error("转写报错:" + ex.Message);
}
}
知识补充
除了上文的方法,小编还为大家整理了一些其他C# WinForm实现文件上传功能的方法,希望对大家有所帮助
C# WinForm 文件上传下载
/**/ /// <summary>
/// WebClient上传文件至服务器
/// </summary>
/// <param name="localFilePath">文件名,全路径格式</param>
/// <param name="serverFolder">服务器文件夹路径</param>
/// <param name="reName">是否需要修改文件名,这里默认是日期格式</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; //服务器保存路径
/**//// 创建WebClient实例
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("文件上传失败,请稍候重试~");
return false;
}
return true;
}
/**/ /// <summary>
/// 下载服务器文件至客户端
/// </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; //另存为的绝对路径+文件名
WebClient client = new WebClient();
try
...{
client.DownloadFile(uri, savePath);
}
catch
...{
return false;
}
return true;
}
免费资源网 – https://freexyz.cn/
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)