#c# #asp.net #file-upload
#c# #asp.net #загрузка файла
Вопрос:
Как я могу определить, закрыт ли файл, который загружает пользователь, перед нажатием кнопки загрузки при использовании диалогового элемента управления FileUpload в C # ASP.net. Это предотвратит отправку пользователем файла с несохраненными данными на сервер для обработки.
Ответ №1:
AFAIK, вы не можете. Файл будет либо:
- A) Быть отправленным без сброшенных изменений, или
- Б) Вызывает проблему, если файл не может быть открыт для отправки содержимого (т. Е. Открыт с помощью какой-либо блокировки) — однако точка, в которой это происходит, скорее всего, находится в диалоговом окне «Открыть файл», так что проблема пользовательской системы.
Ответ №2:
Это (в некоторой степени) возможно, но требует больших усилий и тщательного контроля среды вашего конечного пользователя, что может оказаться невозможным.
Шаги в общем виде следующие:
1. Вы можете использовать виртуальную файловую систему, такую как CBFS или другие библиотеки с открытым исходным кодом (извините, у меня нет практического опыта работы с чем-либо, кроме CBFS) — http://www.eldos.com/solutions/solutions-for-developers.php#commchannel
2. Создайте виртуальную файловую систему таким образом, чтобы она отображалась либо в хранилище базы данных, либо в хранилище на стороне сервера
3. Сопоставьте это как каталог в системах конечных пользователей
4. Пока конечные пользователи создают и изменяют файлы в пределах этого общего ресурса или вы принимаете файлы только из этого общего ресурса, вы можете проверить наличие дескрипторов открытых файлов и, если это так, запретить загрузку
Комментарии:
1. Спасибо @Johnv2020. После обсуждения этого с владельцем проекта они решили сократить это требование до окна сообщения, предупреждающего пользователя о том, что файл закрыт. На данном этапе разработки это кажется самым разумным способом.
2. Удивительно, как владелец проекта меняет спецификации, как только понимает, что решение будет стоить денег и займет время, не так ли..
Ответ №3:
Это зависит от того, как пользователь редактирует ваш файл. Например, Word и Notepad, начиная с Windows Vista или 7, блокируют файл, чтобы никто другой не мог в них записывать. В этом случае это так же просто, как открыть файл, доступный для записи, и проверить, не возникает ли исключение IOException.
static bool IsWriteProtected(string file)
{
try
{
using (File.OpenWrite(file)) ;
}
catch (UnauthorizedAccessException ex)
{
return true;
}
return false;
}
Ваш,
Alois Kraus
Комментарии:
1. Это позволяет проверять файлы только на стороне сервера
2. Исправьте @m.edmondсо, мне нужно проверить клиентскую часть перед отправкой файла. Я думал о создании элемента управления ActiveX, это невозможно, но я хотел уточнить у сообщества и посмотреть, не придумал ли кто-нибудь еще способ.
3. извините, пожалуйста. Похоже, что обычный Java Script в браузере не может получить доступ к вашей локальной файловой системе. Если у вас достаточно прав, то эта ссылка должна помочь: c-point.com/JavaScript/articles/file_access_with_JavaScript.htm