我正在尝试通过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并不是必需的,但我需要一些用户可以从文件夹中选择文件的东西,它给了我完整的路径。
答案 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);
}
}
}