将附加到FileUpload Control的文件上载到FTP C#

时间:2014-02-05 02:16:34

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

我正在尝试将附加到FileUpload控件的文件上载到在FTP中创建的文件夹。文件夹的创建没有问题,但我似乎无法上传文件。

好像我的源文件的文件路径在行String filePath = Server.MapPath("~" + @"\" + nameToGiveFolder);中不正确我尝试了多个文件路径变体,但似乎无法上传文件。

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = FileUpload1.FileName;
    string ftphost = WebConfigurationManager.AppSettings["myHost"].ToString();
    string u = WebConfigurationManager.AppSettings["u"].ToString();
    string p = WebConfigurationManager.AppSettings["p"].ToString();
    string nameToGiveFolder = FileUpload1.FileName.ToString().Substring(0, FileUpload1.FileName.ToString().LastIndexOf("."));
    string ftpfullpath = "ftp://" + ftphost + "/" + nameToGiveFolder;
    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
    ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
    ftp.Credentials = new NetworkCredential(u, p);
    FtpWebResponse CreateFolderResponse = (FtpWebResponse)ftp.GetResponse();

    if (FileUpload1.HasFile)
    {
        try
        {
            Label1.Text = "Has File";
            String filePath = Server.MapPath("~" + @"\" +  nameToGiveFolder);
            FileUpload1.SaveAs(filePath);
        }
        catch (Exception ex)
        {
            Label1.Text = ex.ToString();
        }
    }
    else
    {
        Label1.Text = "No File";
    }
}

1 个答案:

答案 0 :(得分:1)

使用Path.GetFileNameWithoutExtension()。获取文件名

FileUpload1.SaveAs(Server.MapPath(string.Format("~/{0}/{1}", Path.GetFileNameWithoutExtension(FileUpload1.FileName), FileUpload1.FileName)));

请注意,您还需要提供文件名,如果文件名为abc.jpg,则在上面的代码中尝试在名为abc的Web侧根目录下创建文件夹,并将文件保存在文件名为abc.jpg

的文件夹

我认为你的行String filePath = Server.MapPath("~" + @"\" + nameToGiveFolder);的问题只是在末尾有文件夹路径。当您致电FileUpload1.SaveAs时,您需要拥有完整的文件路径。

更新

您收到错误

  

System.IO.DirectoryNotFoundException:找不到部分内容   路径

因为您没有名称为文件名的目录。我不是你想把文件放在哪里。如果要将文件放在新目录中,则需要先创建该目录。

var folderpath = Server.MapPath(string.Format("~/{0}", Path.GetFileNameWithoutExtension(FileUpload1.FileName)));


System.IO.Directory.CreateDirectory(folderpath); 

FileUpload1.SaveAs(Path.Combine(folderpath, FileUpload1.FileName));