.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(FileNames.LastIndexOf("."));
        ContentType = checktype(FileNames);
        string Url = "http://xxx.xxx.xxx.xxx:8089/upfile/wenku/" + FileNames;//域名或者ip地址
        string StringFileName = Url.Substring(Url.LastIndexOf("/") + 1);
        string StringFilePath = Request.PhysicalApplicationPath;
        if (!StringFilePath.EndsWith("/")) StringFilePath += "/";
        try
        {
            MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();
            _xmlhttp.open("GET", Url, false, null, null);
            _xmlhttp.send("");
            if (_xmlhttp.readyState == 4)//数据接收完毕
            {
                if (_xmlhttp.status == 200)//是否返回正确数据
                {
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("测试" + houzhui, System.Text.Encoding.UTF8));
                    HttpContext.Current.Response.ContentType = ContentType;
                    HttpContext.Current.Response.BinaryWrite((byte[])_xmlhttp.responseBody);//输出二进制到浏览器
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                }
                else
                { Response.Write("错误:" + _xmlhttp.statusText + " 未找到要下载的文件!"); }
            }
            else
            {
                Response.Write("错误:" + _xmlhttp.statusText + " 请求的http地址不对!");
                Response.End();
            }
        }
        catch (Exception ex)
        {
            Response.Write("错误:无法找到请求的资源!");
            Response.End();
        }

    }

返回mime类型:

private static string checktype(string filename)
    {
        string ContentType;
        string houzhui = filename.Substring(filename.LastIndexOf(".") + 1).Trim().ToLower();
        switch (houzhui)
        {
            case ".asf":
                ContentType = "video/x-ms-asf ";
                break;
            case ".avi":
                ContentType = "video/avi ";
                break;
            case ".doc":
                ContentType = "application/msword ";
                break;
            case ".zip":
                ContentType = "application/zip ";
                break;
            case ".xls":
                ContentType = "application/vnd.ms-excel ";
                break;
            case ".gif":
                ContentType = "image/gif ";
                break;
            case ".jpg":
                ContentType = "image/jpeg ";
                break;
            case "jpeg":
                ContentType = "image/jpeg ";
                break;
            case ".wav":
                ContentType = "audio/wav ";
                break;
            case ".mp3":
                ContentType = "audio/mpeg3 ";
                break;
            case ".mpg":
                ContentType = "video/mpeg ";
                break;
            case ".mepg":
                ContentType = "video/mpeg ";
                break;
            case ".rtf":
                ContentType = "application/rtf ";
                break;
            case ".html":
                ContentType = "text/html ";
                break;
            case ".htm":
                ContentType = "text/html ";
                break;
            case ".txt":
                ContentType = "text/plain ";
                break;
            case ".pdf":
                ContentType = "application/pdf";
                break;
            default:
                ContentType = "application/octet-stream ";
                break;
        }
        return ContentType;
    }

下载文件并保存到本机:

 /// <summary>
    /// 获取远程文件到本地
    /// </summary>
    /// <param name="url">远程文件地址</param>
    /// <param name="path">本地路径</param>
    private static void DownUrltoFile(string url, string path)
    {
        string Cookie = String.Empty;
        String refer = url.Substring(0, url.LastIndexOf("/") + 1);
        System.Net.HttpWebRequest req = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
        req.AllowAutoRedirect = false;
        req.Referer = refer;
        req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
        System.Net.HttpWebResponse res = req.GetResponse() as System.Net.HttpWebResponse;
        System.Net.WebHeaderCollection headers = res.Headers;
        String newUrl = "";
        if ((res.StatusCode == System.Net.HttpStatusCode.Found) ||
          (res.StatusCode == System.Net.HttpStatusCode.Redirect) ||
          (res.StatusCode == System.Net.HttpStatusCode.Moved) ||
          (res.StatusCode == System.Net.HttpStatusCode.MovedPermanently))
        {
            newUrl = headers["Location"];
            newUrl = newUrl.Trim();
        }

        if (headers["Set-Cookie"] != null)
        {
            Cookie = headers["Set-Cookie"];
        }
        res.Close();
        req = null;
        String fileName = newUrl.Substring(newUrl.LastIndexOf("/") + 1);
        req = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
        req.AllowAutoRedirect = true;
        req.Referer = url;
        req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
        res = req.GetResponse() as System.Net.HttpWebResponse;
        System.IO.Stream stream = res.GetResponseStream();
        byte[] buffer = new byte[32 * 1024];
        int bytesProcessed = 0;
        System.IO.FileStream fs = System.IO.File.Create(HttpContext.Current.Server.MapPath(path));
        int bytesRead;
        do
        {
            bytesRead = stream.Read(buffer, 0, buffer.Length);
            fs.Write(buffer, 0, bytesRead);
            bytesProcessed += bytesRead;
        }
        while (bytesRead > 0);
        fs.Flush();
        fs.Close();
        res.Close();
    }

  

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

时间: 2024-10-10 07:08:56

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

【转】正确处理浏览器在下载文件时HTTP头的编码问题(Content-Disposition)

最近在做项目时遇到了一个 case :需要实现一个强制在浏览器中的下载功能(即强制让浏览器弹出下载对话框),并且文件名必须保持和用户之前上传时相同(可能包含非 ASCII 字符). 前一个需求很容易实现:使用 HTTP Header 的 Content-Disposition: attachment 即可,还可以配合 Content-Type: application/octet-stream 来确保万无一失.而后一个需求就比较蛋疼了,牵扯到 Header 的编码问题(文件名是作为 filena

Linux下不借助工具实现远程linux服务器上传下载文件

# Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## 登录服务器 - `ssh [email protected]` 登录服务器```PC:~$ ssh [email protected][email protected]'s password: ``` ## 文件传输 - 下载文件- `scp [email protected]:/data/log

python 实现ssh远程执行命令 上传下载文件

使用密码远程执行命令 [[email protected] script]# cat daramiko_ssh.py  #!/usr/bin/env python #_*_coding:utf-8 _*_ __author__ = 'gaogd' import paramiko import sys,os host = sys.argv[1] user = 'root' password = 'ddfasdsasda2015' cmd = sys.argv[2] s = paramiko.SSH

ASP.NET Web API 用IE浏览器访问下载文件问题

 如果你没设置Web API 返回数据的formatters,用浏览器访问接口时就会根据浏览器的不同而现实不同形式的结果,由于IE浏览器默认的header是Application/json,所以用IE浏览器访问接口时,总是需要下载JSON文件. 当然你也可以在服务端修改返回数据的形式. 在Global文件的Application_Start()方法中加上下面这句话: <span style="font-family:Microsoft YaHei;">GlobalCon

在SecureCRT上,使用命令行从远程服务器上传或者下载文件

引言: 在服务器上,一般都会通过命令行来进行访问.对于上传或者下载文件的需求,除了使用filezilla之类的工具之外,还可以使用rz/sz来完成类似操作. 1.  SecureCRT SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. 一般的运维或者开发人员都是使用这些工具来远程登录服务器,完成相应操作. 2.  上传或者下载文件需求 一般服务器如果开发了21端口,并支持ftp协议,则可以使用filezi

SFTP远程连接服务器上传下载文件-vs2010项目实例

本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2010 vs2010项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码:uxnt) 文件目录介绍: 1.libssh2.sln是vs2010的解决方案,用vs2010打开(如图1所示): include是需要导入的头文件,lib是需要使用的lib文件(如图2所示): 图1 图2 2.解决方案:"libssh2"(如图3所示) 这里只需要编译运行demo项目即

文件流的方式下载文件

//流方式下载 protected void Button4_Click(object sender, EventArgs e) { string fileName = "aaa.zip";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.zip");//路径 //以字符流的形式下载文件 FileStream fs = new FileStream(filePath, FileMode.Open);

android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件

AsyncHttpClient开源框架android-async-http还是非常方便的. AsyncHttpClient该类通经常使用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求.请求參数通过RequestParams实例创建.响应通过重写匿名内部类 ResponseHandlerInterface的 方法处理. 1.看代码上传文件 public void uploadFile(ArrayList<String> sendFilesPath) {

javascript 计算文件MD5 浏览器 javascript读取文件内容

原则上说,浏览器是一个不安全的环境.早期浏览器的内容是静态的,用户上网冲浪,一般就是拉取网页查看.后来,随着互联网的发展,浏览器提供了非常丰富的用户交互功能.从早期的表单交互,到现在的websocket实时通信,乃至html5的流行. html5给前段开发带来了许多有力的工具,以前浏览器大多通过flash插件进行文件的上传和下载,现在我们可以利用html5给我们带来的fileReader api,读取用户通过表单选中的文件内容. fileReader详情请移步: https://develope