从 FTP 下载文件以及如何提示用户在 ASP.NET C# 中保存/打开文件

2024-02-25

我想从 FTP 下载文件,并在用户单击 ASP.NET C# 页面上的下载按钮时在用户的 Web 浏览器中打开下载/保存提示。

string strDownloadURL = System.Configuration.ConfigurationSettings.AppSettings["DownloadURL"];
string HostName = System.Configuration.ConfigurationSettings.AppSettings["HostName"];
string strUser = System.Configuration.ConfigurationSettings.AppSettings["BasicAuthenticationUser"];
string strPWD = System.Configuration.ConfigurationSettings.AppSettings["BasicAuthenticationPWD"];

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(HostName + strFile);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(strUser, strPWD);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
string fileName = @"c:\temp\" + strFile + "";
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
FileStream file = File.Create(fileName);
byte[] buffer = new byte[2 * 1024];
int read;
while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) { file.Write(buffer, 0, read); }
file.Close();
responseStream.Close();
response.Close();

因此,假设您将 FTP 请求的响应流写入 ASP.NET 响应流,并希望在浏览器中触发下载对话框,您需要设置Content-Disposition响应中的标头。

// note: since you are writing directly to client, I removed the `file` stream
// in your original code since we don't need to store the file locally...
// or so I am assuming
Response.AddHeader("content-disposition", "attachment;filename=" + strFile);

byte[] buffer = new byte[2 * 1024];
int read;
while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) 
{ 
   Response.OutputStream.Write(buffer, 0, read);
}

responseStream.Close();
response.Close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 FTP 下载文件以及如何提示用户在 ASP.NET C# 中保存/打开文件 的相关文章

随机推荐

  • Rails:使用remote: true 停止页面刷新

    我有一个projects show html erb页 Aproject has many project messages并从projects show html erb页面 用户可以创建一个新的project message然而 当新的
  • 模型绑定新Datatables 1.10参数

    在 Datatables 1 10 中 ajax 服务器端参数从 public class DataTableParamModel public string sEcho get set public string sSearch get
  • 如何将 AdMob GADBannerView 添加到每个视图

    我正在我的应用程序中实现一个 AdMob 横幅UIViewController 并且它正在工作 但我有很多视图 我想在每个屏幕上显示一个横幅 我如何实现一个出现在每个屏幕上的横幅 我正在尝试这个AppDelegate swift dispa
  • 谷歌地图添加标记

    我想在 Android 中的 Google 地图上添加标记 任何人都可以帮我做到这一点 如果你们有示例代码 这会对我有很大帮助 并且还告诉我如何设置地图片段的大小 提前致谢 use addMarker like myMap addMarke
  • 使用 Python 装饰器跟踪递归深度

    我正在尝试编写一个装饰器来跟踪Python中递归函数的递归深度 以递归函数为例 例如 def fib n if n 0 return 0 if n 1 return 1 else return fib n 1 fib n 2 通常 要跟踪递
  • 哈希函数增量意味着什么?

    例如 我听说 MurmurHash2 不是 增量 的 但 MurmurHash3 是增量的 这是什么意思 为什么它有用 增量哈希函数适用于以下情况 如果先前 哈希消息 M 稍微更新为新消息 M 然后 应该相当快地计算更新后的哈希值 消息 M
  • 我对同一个类有两个 Kotlin 扩展方法,但具有不同的通用签名,编译器会抱怨

    我正在为同一个类编写两个扩展函数 class Something
  • 不区分大小写的 XPath contains() 可能吗?

    我正在运行 DOM 的所有文本节点 并检查 nodeValue 是否包含某个字符串 html body text contains test 这是区分大小写的 不过我也想抓住Test TEST or TesT 这可以通过 XPath 在 J
  • 错误:资源 android:style/TextAppearance.Material.Widget.Button.Borderless.Colored 未找到

    我正在尝试构建一个具有compileSdkVersion 25和targetSdkVersion 25的项目 但我需要将两者更改为23 因此在更改compileSdkVersion 23和targetSdkVersion 23后我收到错误
  • javascript try catch 在 Firefox 中不能完全工作

    有人可以解释一下为什么会这样吗 不会向我发出 出现问题 的警报 也不会向我发出 正常 的警报 它在镀铬中工作得很好 但在 Firefox 中 它只是退出 它确实在 Web 控制台中显示错误 try catch 的全部目的是确保如果我输入
  • 是否有一个 C++ 标准类可以在作用域退出时将变量设置为值

    在成员函数的范围内 我想临时将成员变量设置为某个值 然后 当这个函数返回时 我想将此成员变量重置为给定的已知值 为了避免异常和多次返回 我用一个简单的 RAII 类来完成它 它是在成员函数的范围内定义的 void MyClass MyMem
  • 根据特定文本字符串选择列

    我正在尝试组合一个宏 该宏将选择某些列并将它们粘贴到新工作表中 问题在于 列往往会根据人们认为合适的方式添加和删除 这会破坏绝对引用 我一直在尝试修改使用宏记录器生成的基本宏 但我没有运气根据其内容选择列 我有一张每天从我们的数据库生成的工
  • 在没有 gpg 签名的情况下验证 git 提交

    我们开始使用 git 作为 VCS 之前使用 SVN 并发现在 git 中您可以轻松区分更改和提交背后的真实人物 现在我们想知道为什么做出这样的设计选择以及是否有我们忽略的事情 让我们假设以下情况 每个人都已经向 gitlab 注册了 ss
  • Perforce API 的 .net 包装器?

    我目前正在 NET 4 中开发一个应用程序 它必须与 Perforce 服务器交互 我的团队之前使用 Perforce API 开发了某种包装器 但它缺少相当多的用例 并且无法正确处理异常 简而言之 这不是我真正可以按原样使用的东西 因为它
  • 如何在PowerShell中使用DTE?

    我正在尝试使用 PowerShell 来自动执行基于种子 例如 EDMX 文件或 DbContext 配置创建 n 层解决方案的过程 我希望能够打开框架解决方案 获取活动实例 并使用自动生成的代码填充项目文件 我正在尝试对提供的示例进行转码
  • 编写每周重复的时间间隔 (ISO 8601)

    我需要正确的每周 ISO 8601重复时间间隔 https en wikipedia org wiki ISO 8601 Repeating intervals 例如 重复 每个星期一 19 00 我已经尝试了很多例子 但没有一个能正常工作
  • 时间戳和合成时间偏移

    H 264 缓冲区是否包含时间戳和解码时间戳信息 当我们获得 H 264 nalu 数据时 其中是否包含计时信息 如果您指的是原始 H 264 NAL 单元 那么它们不包含计时信息 如果指的是 PTS DTS 之类的内容 MKV MP4 T
  • 尝试将日期插入日期时间列时出错

    我有一个表单试图将一些数据插入 SQL Server 2008 数据库 该表单有一个函数来获取当前日期 时间 然后将其插入数据库 如下所示 now date Y m d H i s q INSERT INTO TBL USERS usern
  • 如何在Perl6中加载Perl5的Data::Printer?

    我一直在尝试加载 Perl5 模块Data Printer进入 Perl6 但我遇到了困难 我之前问过这个问题 无法使用 Inline Perl5 将 Perl5 模块导入 Perl6 https stackoverflow com que
  • 从 FTP 下载文件以及如何提示用户在 ASP.NET C# 中保存/打开文件

    我想从 FTP 下载文件 并在用户单击 ASP NET C 页面上的下载按钮时在用户的 Web 浏览器中打开下载 保存提示 string strDownloadURL System Configuration ConfigurationSe