el archivo se corrompe después de transferirlo usando apache commons

He realizado una carga de archivos parcialmente satisfactoria. El archivo con la extensión .html, .jpeg, .pdf, etc. funciona bien. Cuando se trata de .zip, .rpm, .tar.gz, no funciona. El archivo se está transfiriendo. a la ruta deseada pero el archivo está dañado.

<tr>  
 <td>FileName</td>  
 <td><input type="text" name="filename" size="30"/></td>  
</tr> 
<tr>  
 <td>Select main category</td>  
 <td>  
  <select name="main">  
   <option >--Select--</option>  
   <option>aerospace</option>  
   <option>automotive</option>  
   <option>energy</option>  
   <option>icengines</option>  
   <option>wind</option>  
   <option>turbo</option>  
   <option>it</option>
   <option>training</option>  
  </select>  
 </td>  
</tr>  
<tr>  
    <td>Select sub category</td>
 <td>  
  <select name="sub">  
   <option >--Select--</option>  
   <option>internal</option>  
   <option>demo</option>  
   <option>best practice</option>  
   <option>marketing</option>  
   <option>papers & public</option>  
   <option>validation</option>  
   <option>training</option>  
  </select>  
 </td>  
</tr>  


<tr>  
 <td>Upload File</td>  
 <td><input type="file" name="file1"/></td>  
</tr> 

obtendrá el nombre del archivo junto con los valores desplegables y tipo = "archivo", el archivo se transfiere a la ruta deseada pero el archivo está dañado para los formatos mencionados anteriormente (lo he comprobado solo con esos formatos). Necesito todo el archivo para almacenarse sin corromperse.

mi servlet:

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
private String filename="";     
private String main1="";  
private String location;  
private String sub;
private File uploadFile;  
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
try {  
PrintWriter out = response.getWriter();  

DiskFileItemFactory factory = new DiskFileItemFactory();  
ServletFileUpload fileUpload = new ServletFileUpload(factory);         
List items = fileUpload.parseRequest(request);  
Iterator ir = items.iterator();  
while(ir.hasNext()){  
FileItem item = (FileItem)ir.next();  


if(item.isFormField())
{ 

 String name = item.getFieldName();  

 if(name != null)  
 {  
 if(name.equals("userName"))
 {  
  filename = item.getString();  
 }

 else if(name.equals("main"))
 {  
  main1 = item.getString();  
 }
 else if(name.equals("sub"))
 {
     sub=item.getString();
 }
 }  
}else{  

 location = File.separator+"home"+File.separator+"adapco"+File.separator+"Desktop"+ File.separator +"output"+ File.separator +main1+File.separator+sub+File.separator+filename;
 uploadFile = new File(location);        
 long size = item.getSize();  
 if(size <= 1024*1024*1024)
 {  
  item.write(uploadFile);  
  out.println("Your File is uploaded successfully ");  
 }else{  
  out.println("Your File is not uploaded.File size should be less than 1gb");  
 }  
}  
}  
} catch (Exception e) {  
}  
}   

}  

preguntado el 22 de mayo de 12 a las 08:05

¿Estás seguro de que no hay una excepción que sea absorbida por tu bloque catch() vacío? Si funciona con .pdf, no hay motivo para que no funcione con otros tipos, ya que al protocolo no le importa el contenido. -

@ZNK: gracias por su respuesta, en lugar de obtener el nombre del archivo con la extensión (p. ej., abc.pdf), estaba guardando el archivo sin extensión (p. ej., abc). -

y esa guerra corrompiendo el contenido del archivo? -

ya... estaba corrupto, no muestra el tamaño exacto del archivo, si el tamaño de un archivo es de 1 mb mientras se guarda, mostrará menos de 1 mb. "ubicación = Archivo.separador+"inicio"+Archivo.separador+"adapco"+Archivo.separador+"Escritorio"+ Archivo.separador +"salida"+ Archivo.separador +principal1+Archivo.separador+sub+Archivo.separador+nombre de archivo; " el "nombre de archivo" obtendrá solo el nombre del archivo y no el archivo en sí. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.