Pregunta

Escribí un programa que descarga algunos archivos de algunos servidores.
Actualmente el programa funciona correctamente.
Pero quiero agregarle soporte de currículum.
Lo estoy haciendo así, pero el archivo de resultados está dañado:

....

File fcheck=new File(SaveDir+"/"+filename);
if(resumebox.isSelected() && fcheck.exists()){
    connection.setRequestProperty("Range", "Bytes="+(fcheck.length())+"-");
}

connection.setDoInput(true);
connection.setDoOutput(true);

BufferedInputStream in = new BufferedInputStream (connection.getInputStream()); 

pbar.setIndeterminate(false);
pbar.setStringPainted(true);

java.io.FileOutputStream fos ;
if(resumebox.isSelected()){
    if(fcheck.exists()){
        if(connection.getHeaderField("Accept-Ranges").equals("bytes")){
            fos = new java.io.FileOutputStream(SaveDir+"/"+filename,true);
        }else{
            fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
        }
    }else{
        fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
    }
}else{
    fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
}

....

Lo estoy probando en un servidor que sé que admite el currículum.
Descargué algunos bytes. (72720)
Luego intenté reanudarlo.
Luego abrí el archivo con un editor hexadecimal, al desplazamiento 72720 se repiten los primeros bytes:
Bytes 0-36: FLV ............. «.......... Onmetadata
Bytes 72720-72756: FLV ............. «.......... Onmetadata
¡Comienza a descargar desde el comienzo!
¡Mientras que cuando lo hago por WGet, lo hace correctamente y las respuestas por el campo de rango de contenido!
Respuestas del servidor con "302 encontrado" y un "206 contenido parcial" en el registro WGET.
¿Puede "302 encontrado" causar el problema?

Cuál es el problema ?
Gracias.

¿Fue útil?

Solución

Probar:

connection.setRequestProperty("Range", "bytes=" + fcheck.length() + "-");

Menús, el rango especificador según la especificación. Además, si su archivo parcial era de 500 bytes, eso significa que su rango de bytes que tiene es 0-499 y desea más de 500.

Otros consejos

El problema está en (fcheck.length() - 1): esto debería ser fcheck.length().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top