Скачать большой видео файл поврежден - PullRequest
0 голосов
/ 05 июня 2018

В коде на стороне сервера я установил размер буфера и длину содержимого как File.length () , а затем открыл файл, используя FileInputStream .Дальнейшее получение выходного потока с использованием HttpResponse.getOutputStream () и дамп байтов данных, считываемых с использованием FileInputStream

Я использую Apache Tomcat 7.0.52, Java 7


На клиентеФайл Downloader.java

URL url = new URL("myFileURL");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoInput(true);
con.setConnectTimeout(10000);
con.setReadTimeout(10000);
con.setRequestMethod("GET");
con.setUseCaches(false);
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.connect();
FileOutputStream fos = new FileOutputStream("filename");
if(con.getResponseCode()==200){
    InputStream is = con.getInputStream();
    int readVal;
    while((readVal=is.read())!=-1) fos.write(readVal);
}
fos.flush()
fos.close();

Таким образом, приведенный выше код не смог загрузить большой файл.На клиенте с использованием Java 7

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Можете ли вы попробовать это

 FileOutputStream outputStream = new FileOutputStream(fileName);
 int bytesRead;
 byte[] buffer = new byte[1024];
 while ((bytesRead = inputStream.read(buffer)) != -1) {
     outputStream.write(buffer, 0, bytesRead);
 }

Цитирование из https://stackoverflow.com/a/45453874/4121845

Поскольку вы хотите записывать только те данные, которые действительно прочитали.Рассмотрим случай, когда входные данные состоят из N буферов плюс один байт.Без параметра len вы бы написали (N + 1) * 1024 байта вместо N * 1024 + 1 байта.Рассмотрим также случай чтения из сокета или действительно общий случай чтения: фактический контракт InputStream.read () заключается в том, что он передает по крайней мере один байт, а не в том, что он заполняет буфер.Часто это не может по той или иной причине.

0 голосов
/ 05 июня 2018
    fos.flush();
} finally {
    fos.close();
    con.close();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...