#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.