asp.net AJAX загрузить файл в режиме реального времени индикатор выполнения не работает - PullRequest
1 голос
/ 17 февраля 2011

Я пытаюсь загрузить ajax-файл и индикатор выполнения в реальном времени, Я проверил его на локальном хосте, и он работал отлично, однако, когда я попытался протестировать его на онлайн-сервере, панель не работала до конца загрузки файла, когда я помещаю System.Threading.Sleep (значение) в конце цикла загрузки, панель работала, но загрузка была очень медленной,

Как я могу решить эту проблему?

Шаги, которые я использовал:

  1. Создайте iframe (укажите на Upload.aspx) и загрузите в него файл.

  2. В функции загрузки страниц javascript страница iframe вызывается с помощью функции window.parent.register (form), которая предопределяет форму iframe для переменной javascript на родительской странице.

  3. На родительской странице (Default.aspx) я поместил кнопку и щелкнул предикатную форму iframe, которая была отправлена. Затем интервал javascript вызывает функцию обратного вызова ajax каждые (1000 мс).

  4. Эта функция (обратный вызов ajax) наблюдает за сеансом ["UploadInfo"].

  5. Когда форма iframe отправляет страницу iframe, она вызывает метод DoUpload (), который читает файл в цикле while из (fileUpload.PostedFile.InputStream.Read (bytes, 0,1);), а затем записывает байт в определенном пути и добавляет (1) к сеансу ["UploadInfo"] (что увеличивает индикатор выполнения).

  6. Я хочу, чтобы функции обратного вызова DoUpload и ajax работали синхронно.

  7. Когда я запускаю веб-сайт в localhost, все работает точно так, как я ожидаю, но при запуске этого с веб-сайта индикатор выполнения не работает.

Примечание: Когда я помещаю System.Threading.Thread.Sleep (100) в цикл while, индикатор выполнения работает, но очень медленно.

1 Ответ

1 голос
/ 29 июня 2012

Привет! Я нашел ваш ответ, когда искал решение для загрузки файлов без флэш-памяти с индикатором выполнения и проверкой размера файла.

В общем, вам нужен апплет типа flash или java, который работает как на стороне клиента, так и на стороне сервера.

Но я ищу точное решение того, что вы пробовали.

Вы хорошо постарались, но проблема в логике реализации. Вы очень хорошо поняли, что Javascript не может получить доступ к локальной файловой системе. Таким образом, вы полагаетесь на AJAX для серверного кода, который сообщит вам количество полученных / загруженных файлов.

Хорошая идея - асинхронный вызов файла, который вычисляет размер файла. Чтобы понять проблему, с которой вы столкнулись, вам нужно понять, как она работает.

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

По спецификации HTTP 1.1 любой браузер будет одновременно создавать только 2 параллельных соединения с сервером. Другими словами, с одного и того же доменного имени можно загрузить только 2 ресурса.

Пожалуйста, уточните эти параметры и оставьте свой ответ. Лучше пойти на компонент. Я использую obout File uploader (http://www.obout.com/Obout.Ajax.UI/FileUpload/).. Я работаю очень хорошо в течение многих лет. Теперь мне нужен компонент без флэш-памяти согласно моему требованию клиента. В противном случае это лучший компонент ASP.NET, который я использовал для загрузки файлов.

...