上传到 ftp asp.net

Posted

技术标签:

【中文标题】上传到 ftp asp.net【英文标题】:upload to ftp asp.net 【发布时间】:2010-10-24 17:26:26 【问题描述】:

是否可以使用 ASP.NET 将文件直接上传到 ftp 帐户文件夹中?

例如我点击浏览,选择要上传的文件,当我点击“上传”按钮时,它应该将其直接保存到另一个 Web 服务器上的文件夹中,该文件夹位于其他地方,而不是用于上传的服务器。

【问题讨论】:

【参考方案1】:
    /// <summary>
    /// Example call : if (FtpUpload(FileUploadControl1, "ftp.my.com/somePathDir", @"user", "pass!", "domain"))
    /// </summary>
    /// <param name="file"></param>
    /// <param name="ftpServer"></param>
    /// <param name="username"></param>
    /// <param name="ftpPass"></param>
    /// <returns></returns>
    private bool FtpUpload(FileUpload file, string ftpServer, string username, string ftpPass, string domainName = "")
    
        // ftp://domain\user:password@ftpserver/url-path
        // If you are a member of a domain, then "ftp://domain-name\username:password@url-path" may fail because the backslash (\) is sent in as a literal character and Internet Explorer incorrectly looks for a file instead of parsing a Web address. Changing the backslash (\) in the domain-name\username to domainname%5Cusername works correctly.

        try
        
            string ftpAddres;
            if (domainName != string.Empty)
                ftpAddres = "ftp://" + domainName + @"%5C" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName;
            else
                ftpAddres = "ftp://" + username + ":" + ftpPass + "@" + ftpServer + "/" + file.FileName;

            using (var webClient = new System.Net.WebClient())
            
                webClient.UploadData(new Uri(ftpAddres), file.FileBytes);
            

        
        catch (Exception e)
        
            throw new Exception(e.Message, e);
        
        return true;
    

【讨论】:

【参考方案2】:

您可以使用WebClient 类将上传的文件存储到FTP(无需将其作为文件保存在服务器上)。像这样的:

string name = Path.GetFileName(UploadControl.FileName);
byte[] data = UploadControl.FileBytes;

using (WebClient client = new WebClient()) 
   client.UploadData("ftp://my.ftp.server.com/myfolder/" + name, data);

【讨论】:

这绝对不适用于我的 ASP.NET Web 应用程序。我想知道为什么这是一个如此受欢迎的解决方案,而我什至无法让它工作。太令人沮丧了! >. @Chiramisu:有几个可能的原因导致它在您的情况下不起作用,但该方法在正确的情况下确实有效。只需弄清楚是什么使它无法正常工作。 我很惊讶你回复了这么老的帖子,但谢谢你。几天来,我一直在尝试成功地将文件上传到 FTP。请您看一下我的question 关于此事?【参考方案3】:

据我了解您的问题,您想将文件上传到另一台远程服务器(因此它不是与您的网络服务器位于同一网络上的另一台服务器)?在这种情况下,您可以做几件不同的事情。最简单的方法可能是首先将常规文件上传到您的服务器,然后让您的服务器通过 FTP 将文件发送到另一个远程服务器:

string fileName = Path.Combine("<path on your server", FileUpload1.FileName);
FileUpload1.SaveAs(fileName);
using(System.Net.WebClient webClient = new System.Net.WebClient())

    webClient.UploadFile(
        New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
        localFile);

...或者它可以一步完成:

using(System.Net.WebClient webClient = new System.Net.WebClient())

    webClient.UploadData(
        New Uri("ftp://remoteserver/remotepath/" + FileUpload1.FileName), 
        FileUpload1.FileBytes);

(我没有尝试过这段代码,所以其中可能有一些错误......)

更新:我注意到我错误地假设 WebClient 的 UploadXXX 方法是静态的...

【讨论】:

【参考方案4】:

编辑

首先,@ 符号用于将字符串标记为文字。它使您不必转义反斜杠等字符。例如

string path = "Z:\\Path\\To\\File.txt";
string path = @"Z:\Path\To\File.txt";

其次,如果您只有 FTP 访问其他服务器,那么您可以使用 FileUpload 控件的FileUpload.FileBytes 属性。这将为您提供文件内容的byte[]

从此您可以使用System.Net.FtpWebRequestSystem.Net.FtpWebResponse 将您的文件上传到FTP 帐户。

VB.NET 中有一些示例代码,但应该很容易理解

http://www.programmingforums.org/thread15954.html

ORIG

文件上传控件将为您提供网络服务器上的文件。

由您决定是否将该文件从网络服务器复制/保存到任何服务器 你的 FTP 托管在上面。

您是否有在其他服务器上共享的 UNC 路径/映射驱动器可以保存到。

FileUpload 控件有一个.SaveAs() 方法,所以很简单

if (FileUpload1.HasFile)
try

    FileUpload1.SaveAs(@"Z:\Path\On\Other\Server\" + FileUpload1.FileName);

【讨论】:

谢谢你的回答。你能告诉我@符号是做什么用的吗?如果我可以使用IP地址而不是物理路径,因为网页将位于与我将文件上传到的服务器不同的服务器上......例如fpt.mydomain.com/images,在这种情况下,如果可以做到这一点,我可能需要提供用户凭据,对吗?如果有怎么办? @站点创建了一个vertabum字符串,基本上不需要将\转义为\\ 有关逐字字符串的更多信息:msdn.microsoft.com/en-us/library/aa691090(loband).aspx【参考方案5】:

您不能直接从您的 HTML 表单将其上传到 FTP。但是,您可以将其上传到您的 ASP.NET 应用程序,然后使用 FtpWebRequest 从那里将其上传到 FTP。

【讨论】:

以上是关于上传到 ftp asp.net的主要内容,如果未能解决你的问题,请参考以下文章

转载IIS与asp.net管道

ASP.NET入门教程(经典)

ASP.NET入门教程(经典)

kindEditor

KindEditor编辑器

编辑器KindEditor的使用