Html 使用apache commons传输后文件损坏

Html 使用apache commons传输后文件损坏,html,servlets,apache-commons,Html,Servlets,Apache Commons,我已经部分成功地完成了文件上载。扩展名为-.html、.jpeg、.pdf等的文件工作正常。当使用.zip、.rpm、.tar.gz时,它不工作。文件正在传输到所需路径,但文件已损坏 <tr> <td>FileName</td> <td><input type="text" name="filename" size="30"/></td> </tr> <tr> <td&g

我已经部分成功地完成了文件上载。扩展名为-.html、.jpeg、.pdf等的文件工作正常。当使用.zip、.rpm、.tar.gz时,它不工作。文件正在传输到所需路径,但文件已损坏

<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> 

文件名
选择主要类别
--选择--
航空航天
汽车
能量
冰发动机
风
涡轮
信息技术
训练
选择子类别
--选择--
内部的
演示
最佳做法
市场营销
报纸与公众
验证
训练
上传文件
它将获得文件名以及下拉值,type=“file”,文件被传输到所需路径,但文件已损坏为上述格式(我已单独检查了这些格式)。我需要存储所有文件,而不会损坏

<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> 
我的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) {  
}  
}   

}  
import javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
私有字符串filename=“”;
私有字符串main1=“”;
私有字符串位置;
私有字符串子节点;
私有文件上传文件;
@凌驾
受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
试试{
PrintWriter out=response.getWriter();
DiskFileItemFactory=新的DiskFileItemFactory();
ServletFileUpload fileUpload=新建ServletFileUpload(工厂);
列表项=fileUpload.parseRequest(请求);
迭代器ir=items.Iterator();
while(ir.hasNext()){
FileItem=(FileItem)ir.next();
if(item.isFormField())
{ 
字符串名称=item.getFieldName();
if(name!=null)
{  
if(name.equals(“用户名”))
{  
filename=item.getString();
}
else if(name.equals(“main”))
{  
main1=item.getString();
}
如果(名称等于(“子”))
{
sub=item.getString();
}
}  
}否则{
位置=File.separator+“home”+File.separator+“adapco”+File.separator+“Desktop”+File.separator+“output”+File.separator+main1+File.separator+sub+File.separator+filename;
uploadFile=新文件(位置);
long size=item.getSize();

if(size)您确定没有被空的catch()块吞没的异常吗?如果它与.pdf一起工作,则没有理由不与其他类型一起工作,因为协议不关心内容。@ZNK:谢谢您的回答,它不是获取扩展名为的文件名(例如:abc.pdf),而是保存扩展名为的文件(例如:abc)。那场战争会破坏文件内容吗?是的……它正在破坏,不会显示文件的确切大小,如果文件大小为1mb,则在保存时会显示不到1mb。“location=file.separator+“home”+file.separator+“adapco”+file.separator+“Desktop”+file.separator+“output”“+File.separator+main1+File.separator+sub+File.separator+filename;”“filename”将只获取文件名,而不获取文件本身。