Я написал программу на Java, чтобы использовать фрагментацию для загрузки больших файлов через http. Все работает нормально, но я хотел бы добавить индикатор выполнения, который я не могу сделать, если не получу общую длину файла. Есть какой-либо способ сделать это?
Получение общей длины файла при использовании фрагментированных http-передач
Ответы (1)
Если сервер предоставляет поле заголовка Content-Length
, то это легко. Если нет, то вам не повезло.
Разумные реализации сервера обеспечивают Content-Length
, когда содержимое статично и имеет известный размер. Если контент генерируется динамически, то узнать длину априори невозможно, по крайней мере, не пройдя два прохода по данным.
person
Chris Jester-Young
schedule
08.06.2011
Content-Length, кажется, дает мне размер только для текущего фрагмента. Это возможно?
- person Joe; 09.06.2011
@Joe:
Content-Length
представляет длину всего контента. Если это та же длина, что и у первого фрагмента, это означает, что существует только один фрагмент.
- person Chris Jester-Young; 09.06.2011
Хорошо, это не то, что я вижу, так что где-то здесь ошибка. Время идти на охоту!
- person Joe; 09.06.2011
Хорошо, я немного поиграл и вижу, что длина содержимого определенно возвращает длину фрагмента.
- person Joe; 09.06.2011
Весь смысл использования фрагментированного кодирования передачи заключается в том, что сервер заранее не знает, насколько велики данные, которые он возвращает, поэтому он не может дать вам общую длину содержимого. Например, сервер может сжимать результат на лету и не будет знать сжатый размер, пока не отправит обратно весь ответ. В этом случае вы не можете сделать определенный индикатор выполнения. Вы можете сделать неопределенный индикатор выполнения, чтобы указать, что что-то происходит.
- person Jesse Barnum; 02.07.2011