【问题标题】:How to download a file from my webserver to my desktop?如何将文件从我的网络服务器下载到我的桌​​面?
【发布时间】:2012-02-14 03:43:06
【问题描述】:

我已经在互联网上浏览了 3 个小时,正在寻找解决我的问题的方法,我开始怀疑是否有其他人遇到过这个确切的问题?

我正在使用 IIS7 来托管一个网站,该网站在我们办公室周围做一些本地事情。好吧,开发网站一切正常,但现在我正在托管该网站,我不能(也不能其他任何人为此)单击链接以下载所需的文件。 (让我们假装他们点击一个链接从网络服务器下载一些随机文件)

嗯,它下载文件失败,我猜是权限错误。我一直在寻找解决方案,但似乎找不到。我对 IIS7 知之甚少,所以我对应用程序池标识的东西不太了解,尽管我确实设法授予该标识对文件/文件夹的完全访问权限。无论如何,这是它搞砸的特定区域..

这是从 .cs 文件调用函数的 default.cshtml 页面的一部分: //嗯..非常接近确切的东西,只是摆脱了一堆不必要的垃圾

@{
string tmp = Functions.downloadFile(fileName)
}

<html>
tmp
</html>

这是 .cs 文件中实际将文件下载到桌面的部分

public static string downloadFile(string fileName) //i know this example doesnt 
//use filename, but the original code does.
{
    if (Directory.Exists("C:\WebSite\thingsToDownload"))
    {
        string[] files = Directory.GetFiles("C:\WebSite\thingsToDownload");

        foreach (string s in files)
        {
            string[] tmp = s.Split('\\');
            try
            {
                File.Copy(s,
                          Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
                          + "\\" + tmp[tmp.Length - 1]);
            }
            catch (Exception e)
            {
                return "ERROR COPYING: " + e.Message;
            }
        }
        return "GOOD";
    }
    return "DIRECTORY DOESNT EXIST";
}

说完之后,我得到“错误复制:对路径 '\fileName' 的访问被拒绝。

我的猜测是网络服务器无权访问此人的桌面以将文件放在那里。 如果有人能阐明并帮助我得到这个,将不胜感激!

【问题讨论】:

  • 您正在尝试将文件写入服务器的桌面(或fileName 可能指向的其他位置)。使用Response.WriteFile
  • 这段代码是否应该允许用户下载任何东西?似乎在服务器上的两个文件夹之间复制了一个文件。问题可能源于Environment.GetFolderPathLocalSystem(或您的池运行的任何用户)返回一个空路径,但这并不能改变整个方法似乎错误的事实。

标签: c# html iis-7 razor


【解决方案1】:

如果你想通过点击链接下载文件,你应该使用响应。

这是一个示例,例如,当用户单击链接或按钮或其他内容时,您可以使用:

  const string fName = @"C:\picture.bmp";
  FileInfo fi = new FileInfo(fName);
  long sz = fi.Length;

  Response.ClearContent();
  Response.ContentType = Path.GetExtension(fName);
  Response.AddHeader("Content-Disposition", string.Format("attachment; filename = {0}",System.IO.Path.GetFileName(fName)));
  Response.AddHeader("Content-Length", sz.ToString("F0"));
  Response.TransmitFile(fName);
  Response.End();

【讨论】:

  • 用户点击链接 - 服务器应该提供文件。并不是说 OP 正在编写一个应用程序来自主进行这些下载。
  • 这个答案没有错。显然它不会下载到桌面......因为你不能这样做。但它确实给出了一个足够清楚的例子来说明如何下载“随机”文件,并且应该让 OP 开始解决他的问题。
  • 是的,我现在正在尝试这个,我放弃了自动尝试将它发送到桌面。我不认为这是可能的,但我想我会尝试。
  • 老实说,这比我预期的要好!除了当我出于某种原因添加 Response.TransmitFile(fname) 时它会崩溃的事实。但是每当我评论该行时,只要我点击链接,它就会自动下载文件。非常感谢您的帮助!
  • @BrandonStout - 您可能想考虑像这篇文章建议的那样将它们拉上拉链:stackoverflow.com/questions/3984590/…
【解决方案2】:

它在您开发时就可以工作,因为它在您的计算机上运行,​​因此可以访问您的桌面。没有下载到桌面这样的东西。您可以提供文件并让用户决定将文件保存在哪里;在桌面或其他地方。但是您必须通过 http 来执行此操作,而不是直接从服务器执行此操作。

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 2018-12-26
    • 2018-07-16
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多