使用AjaxFileUpload控件完成上载后从临时路径检索文件

时间:2014-07-01 00:32:07

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

我在asp.net页面上使用AjaxFileUpload来上传文件。我想从服务器上的临时路径检索上载的文件。我可以使用文档here中提到的Path.GetTempPath()来获取控件存储数据的临时路径。

但我遇到的问题是Ajax文件上传将文档存储在以下文件夹结构中

Path.GetTempPath/_AjaxFileUpload/<GUID-looks like>/<actual file>

当我在浏览器上使用新选项卡(新网络会话)中的控件时,GUID部分会更改。

我无法找到有关如何获取此路径来检索文件的信息。 请建议是否有办法访问此文件夹结构,以便我可以从临时路径访问该文件。

1 个答案:

答案 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);
}