ASP.Net: Написание кусков файла ... Загрузка файла с резюме - PullRequest
2 голосов
/ 15 января 2010

Пожалуйста, обратитесь к вопросу: Возобновить контроль загрузки файлов

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

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

Процедура, о которой я подумал:

  1. Создать временный файл с уникальным именем (может быть GUID) на сервере.
  2. Считать кусок файла и добавить его в этот временный файл на сервере.
  3. Продолжайте шаги с 1 по 3, пока не будет достигнут EOF.
  4. Теперь, если соединение потеряно или пользователь нажимает кнопку pause, запись файла останавливается и временный файл не удаляется.
  5. Повторное нажатие на кнопку «Продолжить» или повторная загрузка того же файла проверит на сервере, существует ли файл, и для пользователя: resume или overwrite. ( Не уверен, как проверить, является ли это тот же файл. Также, как пошагово отправить чанки с клиента на сервер. )
  6. Нажатие на resume начнется с того места, где его необходимо загрузить, и добавит его в файл на сервере. ( Опять не уверен, как это сделать. )

Вопросы:

  1. Являются ли эти шаги правильными для достижения цели? Или нужны какие-то модификации?
  2. Я не уверен, как реализовать все эти шаги. :-( Нужны идеи, ссылки ...

Любая помощь приветствуется ...

1 Ответ

2 голосов
/ 06 июня 2010

То, что вы пытаетесь, не легко, но выполнимо. Следуйте этим рекомендациям:

  1. Напишите 2 функции на стороне клиента, используя ajax:

    • getUploadedPortionFromServer(filename) - сервер спросит, существует ли файл, и он должен получить от сервера ответ xml со следующей информацией:
      boolean(exist/not exist), size(bytes), md5(string)
      Функция также запустит md5 того же размера, который был получен с сервера в локальном файле,
      Если md5 такой же, вы можете продолжить отправку с того места, где он был остановлен,
      в противном случае или размер == 0, начните сначала.
    • uploadFromBytes(x) - Зависит от 1-й функции.

  2. На сервере вы должны написать соответствующие функции, которые будут проверять необходимые данные и отправлять ответ через XML клиенту.

    • Чтобы иметь разные имена файлов, вы должны использовать какие-то пользовательские теги.
    • Заходили ли пользователи на ваш сервер? если это так, используйте хеш своего имени пользователя, добавленный к имени файла, это поможет вам различать файлы.
    • Если нет, используйте куки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...