通用 模拟下载文件保存方法

起始:

需要使用weiapi 请求外部接口获取文件并保存。

使用方法:

使用

WebRequest 模拟Http请求 获取返回流 。

发现问题:

本地搭建webapi模拟外接口测试时发现,无法获取到webapi返回的文件流。

解决方法:

修改方法。使用httpclient,得到返回的 httpresponsemessage。

经过测试发现,可以兼容各种返回结果。

代码重现:

请求地址的代码:
 string filePath = "d:333.xls";

            try
            {
                var stream = new FileStream(filePath, FileMode.Open);
                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Content = new StreamContent(stream);
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = "333.xls"
                };
                return response;
            }
            catch
            {
                return new HttpResponseMessage(HttpStatusCode.NoContent);
            }

使用HttpRequest模拟请求接收:

    HttpWebRequest request = WebRequest.Create(Url) as HttpWebRequest;
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                    string file = "xxx"; //获取文件名
                    Stream responseStream = response.GetResponseStream();
                    //创建本地文件写入流
                    Stream stream = new FileStream(file, FileMode.Create);
                    byte[] bArr = new byte[1024];
                    int size = responseStream.Read(bArr, 0, (int)bArr.Length);
                    while (size > 0)
                    {
                        stream.Write(bArr, 0, size);
                        size = responseStream.Read(bArr, 0, (int)bArr.Length);
                    }
                    stream.Close();
                    responseStream.Close();

使用HttpClient模拟请求接收:

 //用 request  没法获取到文件流 改用client
                    HttpResponseMessage responseMessage = new HttpResponseMessage();
                    using (HttpClient httpClient = new HttpClient())
                    {
                        Task<HttpResponseMessage> responseMessageTask = httpClient.GetAsync(Url);
                        responseMessage = responseMessageTask .Result;
                    }
                    string file = ""; //生成文件名和路径
                    Stream stream = new FileStream(file, FileMode.Create);
                    var responseStream = responseMessage .Content.ReadAsStreamAsync().Result;
                    byte[] bArr = new byte[1024];
                    int size = responseStream.Read(bArr, 0, (int)bArr.Length);
                    while (size > 0)
                    {
                        stream.Write(bArr, 0, size);
                        size = responseStream.Read(bArr, 0, (int)bArr.Length);
                    }
                    responseStream.Close();
                    stream.Close();
时间: 2024-08-30 07:24:44

通用 模拟下载文件保存方法的相关文章

两种 js下载文件的方法(转)

function DownURL(strRemoteURL, strLocalURL){ try{ var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP"); xmlHTTP.open("Get", strRemoteURL, false); xmlHTTP.send(); var adodbStream = new ActiveXObject("ADODB.Stream"); adodbStrea

linux系统上传下载文件的方法

linux系统上传.下载文件的方法有很多种,最常见的有ftp(需要安装ftp软件及配置),这里不做介绍, 下面介绍我常用的两种方式: 1.sftp方式(通过SecureCRT工具的ssh服务传输): 1.打开CRT工具自带的sftp(通过Alt+P命令打开),如图: 默认进入当前用户的家目录,可以自行cd命令切换到上传.下载的目录(windows操作文件系统需要在命令前加 l 参数,如lcd e:\到E盘根目录,lls列出根目录下的文件),上传通过put 加文件名,下载通过get 加文件名) 2

Android 通过SOCKET下载文件的方法

本文实例讲述了Android通过SOCKET下载文件的方法.分享给大家供大家参考,具体如下: 服务端代码 import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.

.net 直接输出远程文件到浏览器和下载文件保存到本机

利用了xmlhttp,实现代码比较简单具体实现如下: 首先bin文件引入,com->microsoft xml v3.0 具体代码如下: protected void Button1_Click(object sender, EventArgs e) { string FileNames = "201406251824392435.pdf", ContentType = ""; string houzhui = FileNames.Substring(File

Afinal加载网络图片及下载文件使用方法

Afinal快速开发框架使用起来非常方便,下面将讲解如何利用Afinal加载网络图片及下载文件: 先看效果图: 注意:使用Afinal前需添加Afinal的jar,可以在这里下载:http://download.csdn.net/detail/baiyuliang2013/7313587 其中包括了Afinal的源码和jar,使用时只需添加jar包即可,在学习阶段也可以直接添加源码到你的项目中,可以更深入的学习Afinal. 看代码: activit_main.xml: <RelativeLay

IE浏览器下载文件保存时提示:“你没有权限在此位置中保存文件”解决办法

E浏览器下载文件保存时提示 解决办法: 1.Win + R,打开运行命令,输入gpedit.msc,如图所示 2.打开计算机本地组策略编辑器:选择计算机配置-windows设置-安全设置-本地策略-安全选项.在右侧找到“用户账户控制:以管理员批准模式运行所有管理员”,双击打开,如图所示 3.双击打开,设置为“已禁用”,,点击“应用”,“确定”如图所示 4.重启电脑,上述问题就不会再出现. 原文地址:https://www.cnblogs.com/chenshc/p/11827826.html

AFNetworking Block下载文件保存到沙盒

/** *  @author Jakey * *  @brief  下载文件 * *  @param paramDic   附加post参数 *  @param requestURL 请求地址 *  @param savedPath  保存 在磁盘的位置 *  @param success    下载成功回调 *  @param failure    下载失败回调 *  @param progress   实时下载进度回调 */- (void)downloadFileWithOption:(NS

python下载文件的方法

前一段时间是爬文字,最近准备爬图片 找到了两种保存文件的方法 一种是用urllib.urlretrieve方法 #-*- coding: utf-8 -*- import urllib def callbackfunc(blocknum, blocksize, totalsize): '''回调函数 @blocknum: 已经下载的数据块 @blocksize: 数据块的大小 @totalsize: 远程文件的大小 ''' percent = 100.0 * blocknum * blocksi

GridVIew中下载文件的方法探讨,方法(7)最佳。

(1)使用Button下载 在GridView属性中添加: OnRowCommand="GridView1_RowCommand" 在GridView的<Column>中添加: <asp:ButtonField runat="server" Text="下载" HeaderText="下载" ButtonType="Button" CommandName="DownLoad_Cl