RadAsyncUpload: FileNotFoundException при постбеке

Программирование

Tagged Under : , ,

Столкнулся со следующей ситуацией: на странице есть RadAsyncUpload, по ajax’у замечательно загружает файлы на сервер, но как только добираемся потом до постбека, получаем исключение: File Could not find file путьApp_DataRadUploadTempимя_временного_файла.

Исключение вылетает в обработчике событии OnFileUploaded при обращении к e.File.InputStream, которое вылезает при постебеке.

Телерики предлагают обновить Telerik.Web.UI.dll на более новую, но у меня решение нашлось почти что случайно: на одном из форумов предположили, что такое поведение связано со свойством RadAsyncUpload TargetFolder или PhysicalTargetFolder.

Поясню. Дело в том, что когда данные свойства заданы, то файл не помещается в темповую папку, он попадает туда куда ему указали, а когда мы работаем с e.File.InputStream, то он как раз работает с файлами во временном каталоге аплоадера, которого получается что там нет – отсюда ошибка.

Так что либо не указываем значения свойств и сохраняем файл самостоятельно через SaveAs либо видимо не работаем с e.File.InputStream.

Я выбрал первое и ошибка пропала.

RadAsyncUpload: файл занят другим процессом

Программирование

Tagged Under : , ,

Достаточно известная как оказалось ошибка, но мне ранее не известная. Вообщем, ситуация такая: загружается файл, сохраняется при возникновении события OnFileUploaded с помощью e.File.InputStream. Далее пытаюсь дёрнуть сохранённый файл и получаю 500: The process cannot access the file because it is being used by another process.

Как выяснилось проблема состоит в том, что e.File.InputStream каждый раз создаёт новый экземпляр и поэтому вызываемый после сохранения файла метод Close не закрывает экземпляр с помощью которого получили данные, а закрывает другой новый, только что созданный.
Так что тактика простая:

Stream stream = e.File.InputStream;
/* много кода*/
stream.Close();

Вот собственно и всё, работает.

RadAsyncUpload: авторизация при попытке загрузить файл на сервер

Программирование

Tagged Under : , ,

Недавно столкнулся с тем, что при попытке загрузить файл с помощью RadAsyncUpload’а от telerik’ов на сервер из сети, в которой используется прокси весьма проблематично из браузеров отличных от IE.
Проблема заключается в появлении окна, запрашивающего авторизацию. После ввода окно больше не выводится, но и файл не загружается, а порой браузер вообще подвисает.

Решение, есстественно, имеется, а проблема кроется в флеше: именно его использует RadAsyncUpload по умолчанию. Вообщем, в коде страницы выше того места, где используется RadAsyncUpload, пишем:

Telerik.Web.UI.RadAsyncUpload.Modules.Flash.isAvailable = function() { return false; }

В принципе, ничего на вид не меняется, получаем обычный input типа file, работающий через ajax, но авторизация уже не запрашивается.