asp.net fileupload控件,将文件上传到ftp

时间:2015-12-26 19:57:30

标签: c# asp.net file-upload ftp

我正在尝试通过asp.net表单上传文件。问题是当我使用FileUpload控件获取文件的路径时,只获得文件名,而不是完整路径。要将文件上传到ftp,我需要一个完整的路径。我能以某种方式实现这一目标吗?

表单代码:

<div align="center">
            <asp:FileUpload id="FileUploadControl" runat="server" Width="600px" />
            <br />
            <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
</div>

按钮点击代码:

protected void btnUpload_Click(object sender, EventArgs e)
        {
            if(FileUploadControl.FileName != null)
            {
                string filename = Path.GetFileName(FileUploadControl.FileName);
                //MessageBox.Show(this, Server.MapPath(FileUploadControl.FileName));


            var temp = ftp + ftpFolder + Path.GetFileName(FileUploadControl.FileName);

            try
            {
                using (WebClient client = new WebClient())
                {
                    client.Credentials = new NetworkCredential(loginName, password);
                    client.UploadFile(temp, "STOR", FileUploadControl.FileName); // ???
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }

            }

        }

使用FileUpload并不是必需的,但我需要一些用户可以从文件夹中选择文件的东西,它给了我完整的路径。

1 个答案:

答案 0 :(得分:0)

直接来自MSDN

保存已上传的文件

  

FileUpload控件不会自动执行   用户选择要上载的文件后,将文件保存到服务器。   您必须明确提供允许用户的控件或机制   提交指定的文件。例如,您可以提供一个按钮   用户单击以上载文件。你写的代码   保存指定的文件应调用SaveAs方法,保存   文件的内容到服务器上的指定路径。通常,   SaveAs方法在事件的事件处理方法中调用   将帖子发回服务器。例如,如果您提供按钮   要提交文件,您可以包含用于保存文件的代码   点击事件的事件处理方法。

所以,你永远不会真正保存文件(甚至不上传它)。你想要的是这样的:

static string yourSuperSecretDirectory = @"C:\ApplicationName\Uploads";
protected void btnUpload_Click(object sender, EventArgs e)
{
    if(FileUploadControl.HasFile)
    {
        string filename = Path.Combine(yourSuperSecretDirectory, FileUploadControl.FileName);
        FileUploadControl.SaveAs(filename); //actually save/upload the file

        string temp = ftp + ftpFolder + filename

        try
        {
            using (WebClient client = new WebClient())
            {
                client.Credentials = new NetworkCredential(loginName, password);
                client.UploadFile(temp, "STOR", FileUploadControl.FileName); // ???
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.StackTrace);
        }
    }
}