C# FTP文件上载到ASP页面

C# FTP文件上载到ASP页面,c#,asp.net,upload,ftp,dotnetnuke,C#,Asp.net,Upload,Ftp,Dotnetnuke,我看到了一些与我的问题类似的答案,但仍然无法理解 我使用下面的代码让用户上传MP3文件我使用FTP,它与本地主机simple WinForm应用程序配合良好,但在使用远程服务器远程DNN站点时抛出错误: System.IO.FileNotFoundException:找不到文件“C:\Windows\SysWOW64\inetsrv\Test.mp3” 我知道,如果test.mp3文件位于此服务器位置,那么它应该可以工作,但实际上它位于我的C:\Temp\test.mp3路径中。我认为FileU

我看到了一些与我的问题类似的答案,但仍然无法理解

我使用下面的代码让用户上传MP3文件我使用FTP,它与本地主机simple WinForm应用程序配合良好,但在使用远程服务器远程DNN站点时抛出错误:

System.IO.FileNotFoundException:找不到文件“C:\Windows\SysWOW64\inetsrv\Test.mp3”

我知道,如果test.mp3文件位于此服务器位置,那么它应该可以工作,但实际上它位于我的C:\Temp\test.mp3路径中。我认为FileUpload1没有给出正确的文件路径。我怎样才能解决这个问题

protected void btnUpload_Click(object sender, EventArgs e)
{
    string url = System.Configuration.ConfigurationManager.AppSettings["FTPUrl"].ToString();
    string username = System.Configuration.ConfigurationManager.AppSettings["FTPUserName"].ToString();
    string password = System.Configuration.ConfigurationManager.AppSettings["FTPPassWord"].ToString();

    string filePath = FileUpload1.PostedFile.FileName;
    if (filePath != String.Empty)
        UploadFileToFtp(url, filePath, username, password);
}

public static void UploadFileToFtp(string url, string filePath, string username, string password)
{
    var fileName = Path.GetFileName(filePath);
    var request = (FtpWebRequest)WebRequest.Create(url + fileName);

    request.Method = WebRequestMethods.Ftp.UploadFile;
    request.Credentials = new NetworkCredential(username, password);
    request.UsePassive = true;
    request.UseBinary = true;
    request.KeepAlive = false;

    using (var fileStream = File.OpenRead(filePath))
    {
        using (var requestStream = request.GetRequestStream())
        {
            fileStream.CopyTo(requestStream);
            requestStream.Close();
        }
    }

    var response = (FtpWebResponse)request.GetResponse();
    Console.WriteLine("Upload done: {0}", response.StatusDescription);
    response.Close();
}
HttpPostedFile.FileName是客户端上文件的完全限定名

我相信大多数网络浏览器实际上只提供一个文件名,没有任何路径。因此,您只获得Test.mp3,当您尝试在服务器上本地使用这种相对路径时,它将解析为web服务器的当前工作目录,即C:\Windows\SysWOW64\inetsrv

相反,使用HttpPostedFile.InputStream直接访问上传的内容,并将其复制到GetRequestStream


请参阅。

您试图做的事情非常令人困惑。。。您正在尝试将文件从服务器上载到其他FTP服务器,还是尝试通过IIS服务器将文件从浏览器上载到外部FTP服务器?旁注:asp classic不太可能是您文章的正确标记。可能是ASP.Net+WebForms-如果是这样,请编辑。该路径是服务器路径,即使我从本地PC加载了文件,但它试图查看服务器路径。我想我的主机提供商不允许我使用FTP传输到另一台使用FTP的服务器。我想你不明白我的答案。我知道C:\Windows\SysWOW64\inetsrv\Test.mp3是一个服务器路径。我认为在您的例子中,HttpPostedFile.FileName是Test.mp3。由于这不是绝对路径,因此假定当前工作目录为C:\Windows\SysWOW64\inetsrv。您的问题肯定与主机提供商阻止FTP无关。你甚至还没走到那一步。对不起,我试了你建议的,也许还没完全试过?代码如下:HttpPostedFile fileStream=FileUpload1.PostedFile;再次使用var requestStream=request.GetRequestStream{fileStream.InputStream.CopyTorequestStream;requestStream.Close;},我在本地电脑上进行了测试,但在安装到服务器时出错:InnerMessage:无法连接到远程服务器可能不允许从Web服务器连接到FTP服务器。但那是另一个问题,对吗?我相信这个话题已经解决了,我想你是对的。这不是问题,因为我没有从当前服务器连接到其他服务器的权限。