我正在尝试将附加到FileUpload控件附加到FTP中创建的文件夹上的文件上传。该文件夹正在没有问题的情况下创建,但我似乎无法上传文件。
似乎我对源文件的filepath在行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";
}
}
使用Path.GetFileNameWithoutExtension()
。获取文件名
FileUpload1.SaveAs(Server.MapPath(string.Format("~/{0}/{1}", Path.GetFileNameWithoutExtension(FileUpload1.FileName), FileUpload1.FileName)));
请注意,如果文件名是abc.jpg
,则您也需要给出文件名,上面代码尝试在Web侧的根部创建文件夹,称为abc
,并使用文件名abc.jpg
我认为您的String filePath = Server.MapPath("~" + @"" + nameToGiveFolder);
行问题仅在末尾具有文件夹路径。调用FileUpload1.SaveAs
时,您需要拥有完整的文件路径。
更新
您得到错误
system.io.ilectorynotfoundexception:找不到该部分的一部分 路径
因为您没有名称名称的目录。我不是您要把文件放在哪里。如果要将文件放入新目录中,则需要先创建该目录。
var folderpath = Server.MapPath(string.Format("~/{0}", Path.GetFileNameWithoutExtension(FileUpload1.FileName)));
System.IO.Directory.CreateDirectory(folderpath);
FileUpload1.SaveAs(Path.Combine(folderpath, FileUpload1.FileName));