2016-08-08 2 views
0

Я хочу показать размер загружаемого файла во время веб-службы. Поэтому я использовал следующие две ссылки: HttpClient Post with progress and MultipartEntityBuilder, gradle-hockeyapp-plugin, где я нашел класс ProgressHttpEntityWrapper.java. Используя этот класс, я нашел размер загружаемого файла. Использование метода ниже:Фактический размер файла и размер загружаемого файла различаются. Android

public String getFileSize(long size) { 
     if (size <= 0) 
      return "0"; 
     final String[] units = new String[] { mContext.getResources().getString(R.string.bytes), mContext.getResources().getString(R.string.kilo_bytes), mContext.getResources().getString(R.string.mega_bytes), mContext.getResources().getString(R.string.giga_bytes), mContext.getResources().getString(R.string.tera_bytes) }; 
     int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
     return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
    } 

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

Например, мой фактический размер файла 297.1 КБ, но при этом общий размер файла составляет 365,5 КБ. Почему фактический размер файла и общий размер файла могут меняться. Не могли бы вы предложить мне какую-нибудь идею?

+0

Вы имеете в виду строку, возвращаемую вашей функцией, не соответствует длине, которую вы передали? – wutzebaer

+0

@wutzebaer Нет, проверьте вторую ссылку, где вы найдете класс ProgressHttpEntityWrapper. В этом классе он возвращает общие байты внутри метода getCurrentProgress(). Это неверно. Его размер зависит от фактического размера файла. – Sangeetha

+0

возможно смещение + len больше tan b.length и, следовательно, записана только часть len? # – wutzebaer

ответ

-1

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

ProgressHttpEntityWrapper.ProgressCallback progressCallback = new ProgressHttpEntityWrapper.ProgressCallback() { 

    @Override 
    public void progress(float progress) { 
     //Use the progress 
    } 

} 

В ниже код, который я задаю этот прогресс обратного вызова для всей моей сущности

httpPost.setEntity (новый ProgressHttpEntityWrapper (entityBuilder. build(), progressCallback));

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

+0

Не ответ, а материал, составляющий часть вопроса, должен быть размещен ** в самом вопросе **, а не по ссылке. В этом случае, очевидно, ваш код копирования неправильный, а не код форматирования вашего nunber. – EJP

Смежные вопросы