FtpWebRequest下载文件失败

时间:2018-05-04 04:37:17

标签: c# asp.net-mvc ftpwebrequest

在我的网站上我列出了ftp文件夹文件,当用户点击下载按钮时,我调用下面的代码,然后将文件下载到他们的c盘。但是我收到错误访问路径' C:\ myvideo.flv'被拒绝。

代码在服务器上运行,需要保存到本地PC驱动器。

ASP.NET无权访问所请求的资源。考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本进程标识(IIS 5上通常为{MACHINE} \ ASPNET,IIS 6和IIS 7上为网络服务,IIS 7.5上已配置的应用程序池标识),如果应用程序未模拟,则使用该标识。如果应用程序是模拟通过,则身份将是匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的请求用户。

我错过了FtpWebRequest或其他原因导致此问题。

      FtpWebRequest request = (FtpWebRequest)WebRequest.Create(FTPRequest_Host + "myvideo.flv");
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.KeepAlive = true;
        request.UsePassive = true;
        request.UseBinary = true;

        request.Credentials = new NetworkCredential(FTPRequest_Username, FTPRequest_Password);

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);

        using (FileStream writer = new FileStream(@"C: \\" + "myvideo.flv", FileMode.Create, FileAccess.ReadWrite))
        {

            long length = response.ContentLength;
            int bufferSize = 2048;
            int readCount;
            byte[] buffer = new byte[2048];

            readCount = responseStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                writer.Write(buffer, 0, readCount);
                readCount = responseStream.Read(buffer, 0, bufferSize);
            }
        }

        reader.Close();
        response.Close();

4 个答案:

答案 0 :(得分:1)

我认为您可能遇到与C:\驱动器使用相关的权限相关问题,因为在Windows Vista及更高版本中驱动器被视为系统驱动器,因此您需要用户以更高的权限运行代码以保存相应驱动器中的视频文件。

如果您想避免任何文件权限混乱,请尝试使用Server.MapPath()更改要保存的视频文件的路径,因为默认情况下ASP.NET不允许直接访问服务器驱动器的根目录:

using (FileStream writer = new FileStream(Server.MapPath("~/files/myvideo.flv", FileMode.Create, FileAccess.ReadWrite))
{
    // other stuff
}

如果您仍想使用提供的代码在系统驱动器中保存视频文件,请使用具有应用程序池标识管理员权限的用户运行您的应用程序池。

其他信息:

由于您在ASP.NET环境中运行请求进程,请考虑为具有指定文件/文件夹路径的当前应用程序池标识用户授予写入权限。

类似问题:

FileStream not letting me create file on C drive

答案 1 :(得分:1)

它的许可问题!如果在Visual Studio(IIS Express)中运行应用程序,请使用Run as administrator打开Visual Studio。 它是在IIS中托管的,Application Pool Identity应该有足够的权限来访问C驱动器。

答案 2 :(得分:0)

问题不在FtpWebRequest中。该异常来自FileStream对象,因为可能您在某些软件(例如视频播放器)中打开了视频文件,阻止了FileStream对象在该文件中写入。

答案 3 :(得分:0)

你对所做的事情感到困惑

@"C: \\" + "myvideo.flv"

@表示你不必逃避后退,所以我们得到

@"C: \" + "myvideo.flv"

但是有一个奇怪的空间

@"C:\" + "myvideo.flv"

所以这很好(假设您可以写入C:\的根目录)