Загрузка файла Java с использованием сокета, Требуется процент загруженного файла? - PullRequest
1 голос
/ 19 мая 2011

Hii Я загружаю файл на сервер, используя сокет, и мне нужен процент загруженного файла? Как я могу это сделать? У меня есть максимальное значение, то есть длина файла, как я могу узнать, сколько файлов было загружено?

FileInputStream fis = new FileInputStream(fil);
                BufferedInputStream in = new BufferedInputStream(fis);
                BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());

                //Write the file to the server socket           
                int i;

                while ((i = in.read()) != -1) {
                    publishProgress(???);
                    out.write(i);                   
                    System.out.println(i);
                }

Мне нужно передать длину файла, загруженного в метод publishProgress.

Ответы [ 4 ]

1 голос
/ 19 мая 2011

с использованием буферизованного копирования

FileInputStream fis = new FileInputStream(fil);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());

//Write the file to the server socket
int i;
int written = 0;
byte[] buf = new byte[512];

while ((i = in.read(buff)) != -1) {  

    out.write(buff,0,i);
    written += i;
    publishProgress((double)written/length);
    //passing a double value from 0-1 to say how much is transmitted (length is length of file)
    System.out.println(buff+", "+i);
}
0 голосов
/ 20 мая 2011

javax.swing.ProgressMonitorInputStream

0 голосов
/ 19 мая 2011

Для этого вам нужно выполнить одно из следующих действий:

  1. Используйте загрузчик Flash, такой как swfupload (см. http://demo.swfupload.org/Documentation/), поскольку они обычно предоставляют доступ к прогрессу загрузки такого рода.
  2. Предоставьте свой собственный обратный канал: выполните отправку формы с помощью Ajax, а затем, пока происходит отправка формы, вы запускаете таймер JavaScript, который обращается к URL-адресу на сервере с помощью ключа определенного типа, соответствующего загрузке. URL-адрес на сервере определяет, какая часть файла была загружена, и возвращает это число, и вы передаете его в метод uploadProgress.
0 голосов
/ 19 мая 2011

Ниже ваш модифицированный код. записано содержит количество записанных в сокет целых чисел.

FileInputStream fis = new FileInputStream(fil);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());

//Write the file to the server socket           
int i;
int written = 0;

while ((i = in.read()) != -1) {  

    out.write(i);               
    publishProgress(++written);
    System.out.println(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...