排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

前言
下载api中返回的文件里
与web端不同,winfrom 不能使用Responses与 Request
所以下载需要换种方式(核心是怎么拿到返回的流文件)
具体实现(选择保存地址)
- string defaultPath = "";
- private void button1_Click(object sender, EventArgs e)
- {
-
- FolderBrowserDialog fbd = new FolderBrowserDialog();
- fbd.Description = "请选择文件下载地址";
- //首次defaultPath为空,按FolderBrowserDialog默认设置(即桌面)选择
- if (defaultPath != "")
- {
- //设置此次默认目录为上一次选中目录
- fbd.SelectedPath = defaultPath;
- }
- //按下确定选择的按钮
- if (fbd.ShowDialog() == DialogResult.OK)
- {
- //记录选中的目录
- defaultPath = fbd.SelectedPath;
- }
-
- }
具体实现(下载的方法)
- /// <summary>
- /// 下载
- /// </summary>
- /// <param name="jsonStr"></param>
- /// <returns></returns>
- public string selectAPI(string jsonStr)
- {
- //下载的api
- string url = "http://10.72.3.0:8086/CSB";
- string result = "";//返回结果
- try
- {
- Encoding encoding = Encoding.UTF8;
- HttpWebResponse response;
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//webrequest请求api地址
-
- request.Accept = "text/html,application/xhtml+xml,*/*";
- request.ContentType = "application/json";
- //请求方式
- request.Method = "POST";
- //头文件
- request.Headers.Add("_api_timestamp", "1623325847266");
- request.Headers.Add("_api_name", "hssServives");
- request.Headers.Add("_api_version", "1.0.0");
- request.Headers.Add("_api_access_key", "3b78a66b1bb04183a0215b7b8e6e18e9");
- request.Headers.Add("_api_signature", "AYbcuYagEwhnbf+zr4CjVhqSRPs=");
-
- try
- {
- byte[] payload;
- //将URL编码后的字符串转化为字节
- payload = System.Text.Encoding.UTF8.GetBytes(jsonStr);
- //设置请求的 ContentLength
- request.ContentLength = payload.Length;
- //获得请 求流
- System.IO.Stream writer = request.GetRequestStream();
- //将请求参数写入流
- writer.Write(payload, 0, payload.Length);
- // 关闭请求流
- writer.Close();
- response = (HttpWebResponse)request.GetResponse();
- }
- catch (WebException ex)
- {
- response = (HttpWebResponse)ex.Response;
- }
- using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
- {
- //返回的流文件
- Stream stream = response.GetResponseStream();
- //将基础流写入内存流(手动转换流)
- MemoryStream memoryStreams = StreamToMemoryStream(stream);
- byte[] srcBuf = new Byte[memoryStreams.Length];
- memoryStreams.Read(srcBuf, 0, srcBuf.Length);
- memoryStreams.Seek(0, SeekOrigin.Begin);
- //配置文件名
- defaultPath = defaultPath + @"\\" + Guid.NewGuid().ToString().Replace("-", "") + ".zip";
- using (FileStream fs = new FileStream(defaultPath, FileMode.Create, FileAccess.Write))
- {
- fs.Write(srcBuf, 0, srcBuf.Length);
- fs.Close();
- }
- }
- if (response.StatusCode != HttpStatusCode.OK)//返回响应码非成功格式化数据后返回
- {
- result = "Exception:" + result;
- }
- return result;
- }
- catch (WebException ex)
- {
- return "Exception:" + ex.Message;
- }
- }
具体实现(将基础流写入内存流的方法)
- public MemoryStream StreamToMemoryStream(Stream stream)
- {
- MemoryStream memoryStream = new MemoryStream();
-
- //将基础流写入内存流
- const int bufferLength = 1024;
- byte[] buffer = new byte[bufferLength];
- int actual = stream.Read(buffer, 0, bufferLength);
- while (actual > 0)
- {
- // 读、写过程中,流的位置会自动走。
- memoryStream.Write(buffer, 0, actual);
- actual = stream.Read(buffer, 0, bufferLength);
- }
- memoryStream.Position = 0;
-
- return memoryStream;
- }
评价