El archivo descargado está dañado compartida por el cliente en Java

Harsh Kanakhara:

Traté de crear el archivo en el servidor utilizando el flujo de entrada que estoy recibiendo de parte del cliente.

Archivo se crea con el mismo tamaño que el del archivo original. Pero cuando se trata de abrirlo está demostrando que el archivo está dañado.

fileSharing.jsp el servidor de cliente que está tratando de recurso compartido de archivos (remitente)

HttpURLConnection httpURLConnection = null;
OutputStream os = null;
InputStream is = null;
try {
    File fileObj = new File("D://test.pdf");
    out.print("File Length " + fileObj.length() + " Name " + fileObj.getName());
    URL url = new URL("http://localhost:2080/Receiver/fileupload?filename=test.pdf&filelength=" + fileObj.length());
    httpURLConnection = (HttpURLConnection) url.openConnection();
    httpURLConnection.setDoOutput(true);
    httpURLConnection.setRequestMethod("POST");
    httpURLConnection.setRequestProperty("Content-Type", "multipart/mixed");
    httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
    httpURLConnection.setRequestProperty("Cache-Control", "no-cache");
    httpURLConnection.setRequestProperty("Content-Disposition", "form-data; name=\"Dummy File Description\"");
    httpURLConnection.setChunkedStreamingMode(8192);
    httpURLConnection.connect();

    is = new BufferedInputStream(new FileInputStream(fileObj));
    os = new BufferedOutputStream(httpURLConnection.getOutputStream());

    byte[] buff = new byte[8192];
    int len = 0;
    while ((len = is.read(buff, 0, buff.length)) > 0) {
        os.write(buff, 0, len);
        os.flush();
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    is.close();
    os.close();
    httpURLConnection.disconnect();
}

Servlet FileUploadController en el lado del servidor que está intentando descargar el archivo (receptor)

InputStream is = null;
OutputStream os = null;
try {
    is = request.getInputStream();
    int total = 0;
    int bytes = 0;
    os = new BufferedOutputStream(new FileOutputStream(new File("D://files//dummy.pdf")));
    byte[] buff = new byte[8192];
    while (true) {
        if ((bytes = is.read(new byte[8192])) == -1) {
            System.out.println("File shared successfully");
            System.out.println("Total " + total);
            break;
        }
        total = total + bytes;
        System.out.println("Length " + bytes);
        os.write(buff, 0, bytes);
        //os.flush();
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    is.close();
    os.close();
}
Joachim Sauer:

En el bucle de lectura FileUploadControllerque una instancia de una nueva matriz y leer en ella, pero que no se aferra a él para continuar su uso:

 byte[] buff = new byte[8192];
 while(true){
     if((bytes = is.read(new byte[8192])) == -1){

Sin embargo, se escribe buff en el archivo (que estará lleno de 0 bytes, por lo que tendrá un archivo con la longitud correcta, pero está lleno de 0 en lugar de los datos reales).

Sustituir a la última línea con

     if((bytes = is.read(buff)) == -1){

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=337828&siteId=1
Recomendado
Clasificación