公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

asp.net從ftp下載大文件再輸出瀏覽器的實(shí)現(xiàn)(對(duì)文件同時(shí)進(jìn)行讀寫(xiě)操作)

admin
2021年3月3日 11:12 本文熱度 4199
很多時(shí)候安全起見(jiàn),不會(huì)讓用戶通過(guò)瀏覽器直接從ftp下載文件。這時(shí)我們需要web從ftp下載文件再輸出到瀏覽器,對(duì)于小文件我們可以一次性讀到memorystream,然后輸出;但是大文件這樣實(shí)現(xiàn)就會(huì)導(dǎo)致服務(wù)器內(nèi)存爆炸,此時(shí)我們可以利用filestream,一邊從ftp下載數(shù)據(jù)到本地,一邊從本地輸出到用戶客戶端,這樣對(duì)于再大的文件都不會(huì)影響內(nèi)存。
以下是通過(guò)異步的方式實(shí)現(xiàn)對(duì)下載文件同時(shí)進(jìn)行讀寫(xiě)操作的代碼(.net framwork 4.5),MD5驗(yàn)證一致:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication6
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        Aspose.Network.Ftp.FtpClient ftpclient = new Aspose.Network.Ftp.FtpClient("xxxx", "xxx", "xxx");

        protected void Page_Load(object sender, EventArgs e)
        {

        }
        string fileName = "C4F4EEP0CX00_ECN-52966A.exe";
        string downloadPath = string.Empty;
        string refilename = string.Empty;
        public async void DownLoadFileAsync()
        {
            string extension = Path.GetExtension(fileName);
            refilename = Path.GetFileNameWithoutExtension(fileName) + DateTime.Now.ToString("yyyyMMddHHmmssffff") + extension;
            downloadPath = Server.MapPath(Path.Combine("tempFile", refilename));
            try
            {
                ftpclient.Connect();
                ftpclient.Login();
                ftpclient.KeepAlive();
                //Task.Run()需要.net4.5及以上版本的支持
                await Task.Run(() => { ftpclient.Download("CLIENT_TMP//" + fileName, downloadPath); });

                //以下代碼支持.net 4.0 ,但是需要額外在項(xiàng)目中加一個(gè)類TaskEx
                //await Task.Factory.StartNew(() => { ftpclient.Download("CLIENT_TMP//" + fileName, downloadPath); });
            }
            catch
            {
                throw;
            }
            finally
            {
                ftpclient.Disconnect();
            }
        }

        //要使用異步,頁(yè)面配置頭需要加Async="true" 
        //<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication6.WebForm1" Async="true" %>       
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                //異步從ftp下載文件到web服務(wù)器本地文件夾
                DownLoadFileAsync();
                Response.Clear();//清空緩沖區(qū)
                Response.Buffer = false;//不從緩沖區(qū)返回?cái)?shù)據(jù)
                Response.ContentType = "application/ctet-stream";//設(shè)置輸出流
                Response.AddHeader("Content-Disposition", "attachment;  filename=" + fileName + ";");
                Response.AddHeader("Connection", "Keep-Alive");//長(zhǎng)連接
                Thread.Sleep(2000);//等待異步創(chuàng)建文件成功,避免fileStream初始化失敗
                //FileAccess.Read表示當(dāng)前流只能讀,不能寫(xiě),如果后續(xù)有寫(xiě)操作會(huì)報(bào)錯(cuò)
                //FileShare.ReadWrite 表示當(dāng)前流在操作磁盤(pán)文件過(guò)程中其他流可以讀也可以寫(xiě).
                using (FileStream fileStream = new FileStream(downloadPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    using (BinaryReader br = new BinaryReader(fileStream))
                    {
                        int length = 2048;
                        //獲取br.BaseStream.Length時(shí)值會(huì)隨著ftp下載而變化,每次獲取都會(huì)更新
                        //br.ReadBytes()讀取完后br.BaseStream.Position會(huì)前移.
                        while (br.BaseStream.Position < br.BaseStream.Length)
                        {
                            length = br.BaseStream.Length - br.BaseStream.Position > 2048 ? 2048 : (int)(br.BaseStream.Length - br.BaseStream.Position);
                            Response.BinaryWrite(br.ReadBytes(length));
                        }
                    }

                }
            }
            catch (Exception ex)
            {
                Response.Write($"<script>alert(''下載失敗:{ex.Message}'')</script>");
            }
            finally
            {
                //下載完成后刪除本地文件夾的文件
                try
                {
                    File.Delete(downloadPath);
                }
                catch
                {

                }
                Response.End();
            }

        }

    }
}

該文章在 2021/3/3 11:12:04 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品视频免费一区二区三区 | 丰满人妻一区二区三区视频53 | 91午夜福利片人妻无码 | 国产日韩乱码精品一区二区 | 国产精品亚韩精品无码a在线 | 国产午夜视频高清 | 丰满熟妇乱又伦 | 国产日韩欧美一区二区三区在线 | 国产精品视频一区二区三 | 国产精品一区二区在线 | 动漫成人无码精品一区二区三区 | 91精品导航在线观看 | 国产经典国语三级级在线电影 | 精品国产av色一区二区深夜久久 | 国产成年女人免费视频播放a | 国产一区二区三区免费观看久久 | 国产精品白丝 | 91午夜精品亚洲一区二区三 | 成人爱av在线播放 | 国产裸体歌舞一区二区视频 | 国产激情无码视频一区二区三区 | 91精品免费不卡在线观看 | 国产麻豆成人传媒在线观看 | 成人无码国产 | 国产欧美日韩一级视频在线观看 | 国产产无码乱码精品久久鸭 | 高清视频在线观看一区二区三区 | 国产一二三区有声小说 | 国产成人综合久久免费导航 | 国产成人av大片在线观看 | 国产小视频网在线播放 | 69精品人人人人 | 国产综合福利视频电影 | 国产人妖ts观看一区二区 | 国产欧美日韩制服在线精选推荐 | 国产91精选在线观看网站 | 国产大学生喷水流白浆视频 | 精品国产免费人成电影在线看 | 欧美一区二区三区四区 | 精品国产高清免费第一区二区三区 | 国产三级片在线观看 |