我在asp.net页面上使用AjaxFileUpload来上传文件。我想从服务器上的临时路径检索上载的文件。我可以使用文档here中提到的Path.GetTempPath()
来获取控件存储数据的临时路径。
但我遇到的问题是Ajax文件上传将文档存储在以下文件夹结构中
Path.GetTempPath/_AjaxFileUpload/<GUID-looks like>/<actual file>
当我在浏览器上使用新选项卡(新网络会话)中的控件时,GUID部分会更改。
我无法找到有关如何获取此路径来检索文件的信息。 请建议是否有办法访问此文件夹结构,以便我可以从临时路径访问该文件。
答案 0 :(得分:0)
执行此操作的唯一方法是将路径保存在Session variable
或DB中。所以它完全取决于你想如何使用这条路径。
我使用Session在文件上传完成后存储路径,并在我想确认更改时检索URL,但如果您在新会话中的其他位置需要该路径,则可以将其存储到XML或甚至DB然后在另一个地方使用它。
以下是使用Session变量执行此操作的示例:
protected void fileUpload_UploadComplete(object sender, AjaxFileUploadEventArgs e)
{
string path = Path.Combine(Path.GetTempPath(), "_AjaxFileUpload", e.FileId);
//using session
Session["FileDirectory"] = path;
// you could also store this in db, xml or text file as well.
// e.g. XML
XDocument doc = new XDocument(
new XElement("Root",
new XElement("Child", path)
)
);
doc.Save("Root.xml");
}
您可以在申请中的任何位置从声明的会话中访问您的文件路径。
额外信息 然后,您可以将文件URL作为参数传递,将文件保存在应用程序的任何位置:
protected void btnSave_Click(object sender, EventArgs e)
{
//get the file path from session, xml or db ..
string filePath = Session["FileDirectory"].ToString();
SaveFiles(filePath);
}
public void SaveFiles(string fileDirectory)
{
//copy the file from temp serevr to the permanent folder
File.Copy(fileDirectory, "your new path", false);
//deletes the file from temp server
Directory.Delete(fileDirectory, true);
}