Извлечение файла из временного пути после завершения загрузки с использованием элемента управления AjaxFileUpload

#c# #asp.net #ajax #file #file-upload

#c# #asp.net #ajax #файл #загрузка файла

Вопрос:

Я использую AjaxFileUpload для asp.net страница для загрузки файлов. Я хочу извлечь загруженный файл из временного пути на сервере. Я могу получить временный путь, по которому элемент управления хранит данные, используя Path.GetTempPath() , как указано в документации здесь.

Но проблема, с которой я сталкиваюсь, заключается в том, что загрузка файлов Ajax хранит документы в следующей структуре папок

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

Часть GUID изменяется, когда я использую элемент управления с новой вкладки (новый веб-сеанс) в браузере.

Я не могу найти информацию о том, как получить этот путь для извлечения файла. Пожалуйста, подскажите, есть ли способ получить доступ к этой структуре папок, чтобы я мог получить доступ к файлу по временному пути.

Ответ №1:

Единственный способ сделать это — сохранить путь в Session variable или в БД. Так что это полностью зависит от того, как вы хотите использовать этот путь.

Я использую сеанс для сохранения пути после завершения загрузки файла и получения URL-адреса, когда я хочу подтвердить изменения, но если вам нужен этот путь где-то еще в новом сеансе, вы можете сохранить его в файле, таком как XML или даже DB, а затем использовать его в другом месте.

Вот пример того, как вы делаете это с помощью переменной сеанса:

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

Комментарии:

1. Я пробовал использовать сеансы. Хотя они работают, я не могу использовать их в моей конкретной ситуации из-за отсутствия управления сеансами. На данный момент я не уверен в деталях, но я знаю, что не могу использовать сеансы:(

2. Как я уже сказал, если вы не можете использовать Session, тогда вы могли бы просто сохранить путь в DB или файл XML вместо этого. Я также обновил ответ с помощью XML.