Получение общей длины файла при использовании фрагментированных http-передач

Я написал программу на Java, чтобы использовать фрагментацию для загрузки больших файлов через http. Все работает нормально, но я хотел бы добавить индикатор выполнения, который я не могу сделать, если не получу общую длину файла. Есть какой-либо способ сделать это?


person Joe    schedule 08.06.2011    source источник


Ответы (1)


Если сервер предоставляет поле заголовка Content-Length, то это легко. Если нет, то вам не повезло.

Разумные реализации сервера обеспечивают Content-Length, когда содержимое статично и имеет известный размер. Если контент генерируется динамически, то узнать длину априори невозможно, по крайней мере, не пройдя два прохода по данным.

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