Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将文件从Web服务器下载到桌面?_C#_Html_Iis 7_Razor - Fatal编程技术网

C# 如何将文件从Web服务器下载到桌面?

C# 如何将文件从Web服务器下载到桌面?,c#,html,iis-7,razor,C#,Html,Iis 7,Razor,我已经在互联网上搜索了3个小时,现在正在寻找解决我的问题的方法,我开始怀疑是否还有其他人曾经遇到过这个问题 我正在使用IIS7来主持一个网站,在我们办公室附近做一些本地的事情。嗯,开发网站一切都很好,但是现在我托管了这个网站,我不能(其他任何人也不能)点击链接下载所需的文件。(让我们假装他们点击一个链接从Web服务器下载一些随机文件) 嗯,从我猜是权限错误的地方下载文件失败了。我一直在寻找解决办法,但似乎找不到。我对IIS7知之甚少,因此我对应用程序池标识的内容了解不多,尽管我确实成功地授予了该

我已经在互联网上搜索了3个小时,现在正在寻找解决我的问题的方法,我开始怀疑是否还有其他人曾经遇到过这个问题

我正在使用IIS7来主持一个网站,在我们办公室附近做一些本地的事情。嗯,开发网站一切都很好,但是现在我托管了这个网站,我不能(其他任何人也不能)点击链接下载所需的文件。(让我们假装他们点击一个链接从Web服务器下载一些随机文件)

嗯,从我猜是权限错误的地方下载文件失败了。我一直在寻找解决办法,但似乎找不到。我对IIS7知之甚少,因此我对应用程序池标识的内容了解不多,尽管我确实成功地授予了该标识对文件/文件夹的完全访问权限。不管怎么说,这里是它正在搞砸的具体区域

这是default.cshtml页面的一部分,用于从.cs文件调用函数: //嗯。。非常接近实际情况,只是扔掉了一堆不必要的垃圾

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

<html>
tmp
</html>
说了这么多之后,我得到了“复制错误:对路径'\fileName'的访问被拒绝”

我的猜测是,Web服务器没有访问个人桌面的权限,无法将文件放在那里。
如果有人能帮我弄明白这一点,我将不胜感激!

当你开发它时,它起到了作用,因为它在你的计算机上运行,因此可以访问你的桌面。没有下载到桌面这样的事情。你可以提供文件,让用户决定保存文件的位置;在桌面上或桌面上但是您必须通过http而不是直接从服务器进行下载。

如果您想通过单击链接下载文件,您应该使用response

下面是一个示例,您可以在用户单击链接、按钮或其他东西时使用:

  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();

您正试图将文件写入服务器的桌面(或
fileName
可能指向的其他位置).Use。此代码是否允许用户下载任何内容?服务器上的两个文件夹之间似乎复制了一个文件。问题可能源于
环境。GetFolderPath
LocalSystem
返回一个空路径(或池中运行的任何用户)但这并不能改变整个方法似乎是错误的这一事实。用户在单击一个链接-服务器应该提供文件。这并不是说OP正在编写一个应用程序来自动进行这些下载。这个答案没有错。显然它不会下载到桌面上…因为你不能这样做。但它确实给出了一个明确的答案有足够的例子说明如何下载“随机“文件,应该让OP开始解决他的问题。是的,我现在正在尝试,我放弃了自动将其发送到桌面的尝试。我不认为这是可能的,但我想我会试试。老实说,这比我预期的效果要好!除了在Response.TransmitFile(fname)中添加时由于某种原因它会崩溃这一事实。。但是,每当我评论这一行时,只要我点击链接,它就会自动下载该文件。非常感谢你的帮助@布兰登斯塔特-你可能想考虑让他们像这个职位暗示拉链:
  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();