多附件的上传下载--代码可直接用

action中的代码

   try {
//    多附件上传
       MultipartRequestHandler mrh = conForm.getMultipartRequestHandler();
       Map formFiles = mrh.getFileElements();
    String fileName="";
    if (formFiles!=null){
     AnnexsUpload au = new AnnexsUpload(req,res);//获得上传附件通用对象
     Iterator it = formFiles.values().iterator();
     while (it.hasNext()) {
      //图片上传
      FormFile file = (FormFile)it.next();
      au.setSaveDir(this.servlet.getServletContext().getRealPath("/loadImage/"));//将图片放入存储文件路径
      fileName=au.randomFileName(file.getFileName());
      au.upload(au.getSaveDir()+File.separator+ fileName, fileName, file);//上传附件
      //保存记录
      IAttachmentDAO ia = new AttachmentDAO();
      TabAttachment att = new TabAttachment();
      att.setFieldId(con.getCoid());//把资讯表的id添加到附件表里面
      att.setTableName(tableName);  //关联的表名
      att.setAttachFile(fileName);  //上传到服务器的文件名
      att.setRemark(file.getFileName());//文件原来的真名
      att.setUploadName(user.getRealname()); //上传者,即登录者姓名
      ia.addAttachment(att);
     }
     }
   } catch (Exception e) {
   }

 

AnnexsUpload.java

package com.bcc.comm;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.struts.upload.FormFile;

public class AnnexsUpload {
 private HttpServletResponse response;
 private HttpServletRequest request;
 private String saveDir;//文件保存路径
 private String oldFileName;//原始文件名
 private String newFileName;//新文件名
 private String newFilePath;//新文件路径
 private long fileSize;//文件大小
 private long maxFileSize = 1024 * 1024 * 20;//上传文件最大大小6M
 private int thresholdSize = 4000;//起始大小
 
 public AnnexsUpload(HttpServletRequest request, HttpServletResponse response) {
  super();
  this.response = response;
  this.request = request;
 }
 //产生随机文件名
 public synchronized String randomFileName(String fileName){
  String temp = fileName.substring(fileName.lastIndexOf("."));//得到文件扩展名
  try {
   Thread.sleep(10);//如果有多个线程同时上传就休眠1毫秒,这样就可以避免产生的文件名一样
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  return System.currentTimeMillis() + temp;
 }
 //文件目录不存在则创建
 public void setSaveDir(String saveDir){
  this.saveDir = saveDir;
  File f = new File(this.saveDir);
  if(!(f.isDirectory())){
   f.mkdirs();
  }
 }
 
 //上传单个文件
 public boolean upload(){
  DiskFileUpload dfu = new DiskFileUpload();
  dfu.setSizeMax(this.maxFileSize);//设置上传文件最大值
  dfu.setSizeThreshold(this.thresholdSize);//设置初始大小
  dfu.setRepositoryPath(this.newFilePath);//设置上传路径
  List list = null;
  try {
   list = dfu.parseRequest(this.request);//解析request并且返回list集合
  } catch (FileUploadException e) {
   e.printStackTrace();
  }
//  System.out.println(list.isEmpty());
  for (int i = 0; i < list.size(); i++) {
   FileItem fi = (FileItem) list.get(i);
   try {
    //中文编码转换
    this.oldFileName = new String(fi.getFieldName().getBytes(),"GB2312");
    //得到原始文件名
    this.oldFileName = this.oldFileName.substring(this.oldFileName.indexOf("//") + 1);
    this.fileSize = fi.getSize();
    if(this.fileSize > this.maxFileSize){
     System.out.println("文件太大");
     return false;
    }
    this.newFileName = this.randomFileName(this.oldFileName);
    this.newFilePath = this.saveDir + this.newFileName;
    File f = new File(this.saveDir,this.newFileName);
    fi.write(f);
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    return false;
   } catch (Exception e) {
    e.printStackTrace();
    return false;
   }
  }
  return true;
 }
 
 //上传新文件
/* public boolean upload(FormFile file){
  try {
   this.fileSize = file.getFileSize();
   if(this.fileSize > this.maxFileSize){
    System.out.println("文件太大");
    return false;
   }
   this.oldFileName = new String(file.getFileName().getBytes(),"GB2312");
   this.oldFileName = this.oldFileName.substring(this.oldFileName.lastIndexOf("//") + 1);
   this.newFilePath = this.saveDir + "//" + this.randomFileName(this.oldFileName);
   this.newFileName = this.randomFileName(this.oldFileName);
   
   AnnexsBean fb = new AnnexsBean();
   fb.AddAnnexs(new Annexs(this.newFilePath,this.newFileName,this.fileSize + ""));
   //构造输入流
   BufferedInputStream bis = new BufferedInputStream(file.getInputStream(),(int)this.fileSize);
   File f = new File(this.newFilePath);
   FileOutputStream fos = new FileOutputStream(f);
   
   byte[] b = new byte[1024];
   int len = 0;
   while((len = bis.read(b)) > 0){
    fos.write(b,0,len);//从缓冲区里读取数据写入输出流
   }
   fos.close();
   bis.close();
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
 }*/
 
 //以自定义的名称保存文件
 public boolean upload(String filePath,String fileName,FormFile file){
  this.fileSize = file.getFileSize();
  if(this.fileSize > this.maxFileSize){
   System.out.println("文件太大");//如果大于6M
   return false;
  }
  this.oldFileName = file.getFileName();
  this.newFileName = fileName;
  this.newFilePath = filePath;
  try {
   BufferedInputStream bis = new BufferedInputStream(file.getInputStream(),(int)this.fileSize);
   File f = new File(this.newFilePath);
   FileOutputStream fos = new FileOutputStream(f);
   
   byte[] b = new byte[1024];
   int len = 0;
   while((len = bis.read(b)) > 0){
    fos.write(b,0,len);
   }
   fos.close();
   bis.close();
   return true;
  } catch (FileNotFoundException e) {
   e.printStackTrace();
   return false;
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
 }
 
 //删除文件
 public static boolean deleteFile(String path){
  File f = new File(path);
  if(f.exists()){
   f.delete();
   return true;
  }else
   return false;
 }
 /**
  * 删除文件
  * @param uploadPath 文件的路径
  * @param fileName  文件名
  */
 public static void deleteFile(String uploadPath,String fileName){
  File file = new File(uploadPath+fileName);
  if(file.exists()){
       file.delete();
  }else{
//   System.out.println(uploadPath+fileName+"文件不存在");
  }
 }

 public void setSaveDirReport(String saveDir){
  this.saveDir = saveDir;
  File f = new File(this.saveDir);
  if(f.isDirectory()){
   f.mkdirs();
  }
 }
 
 //文件下载
 public void download(String filePath,String fileName,boolean isOnline){
  File file = new File(filePath);
  System.out.println(filePath);
  if(!file.exists()){
   try {
    throw new Exception("文件不存在");
   } catch (Exception e) {
    e.printStackTrace();
   }
   return;
  }
  try {
   BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
   byte[] b = new byte[1024];
   int len = 0;
   
   response.reset();
   if(isOnline){
    URL url = new URL("
file:///" + filePath);
    response.setContentType(url.openConnection().getContentType());
    response.setHeader("Content-Disposition", "inline;filename=" + new String((fileName + filePath.substring(filePath.lastIndexOf("."))).getBytes(),"ISO-8859-1"));
   }else{
    response.setContentType("application/x-msdownload");
    response.setHeader("Content-Disposition", "attachment; filename=" + new String((fileName+filePath.substring(filePath.lastIndexOf("."))).getBytes(),"ISO-8859-1"));
   }
   OutputStream out = response.getOutputStream();
   while((len = bis.read(b)) > 0){
    out.write(b,0,len);
   }
   out.close();
   bis.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }  
 }
  
}

jsp页面代码

<tr>
        <th>附件</th>
        <td colspan="3" >
         <input type="checkbox" id="chkAtt" οnclick="myShow();">上传附件
         <table>
          <c:forEach var="listatt" items="${listAtt}">
           <tr id="imgdiv${listatt.tatId}"><td style="border:0px;">${listatt.remark}
            <a href="javascript:form111(${listatt.tatId})"><img border="0" alt="删除" src="<%=request.getContextPath()%>/background/images/del.jpg"/></a>
           </td>
           </tr>
           <tr><td><div id="mdiv"></div></td></tr>
          </c:forEach>
         </table>
         <table width="100%" style="display: none;" id="PLList" class="chart_list">
        <tr><td align="left" width="38%">
        <input type="file" name="file" size="49" class="inputs" />
        <td>
           <nobr>
         <input type="button" value=" + " οnclick="insertRow()"  class="buttoncss" title="增加一行">
         <input type="button" onClick="DeleteRow('PLList')" value=" - " class="buttoncss" title="删除一行">
         </nobr>
         <input type="hidden" value="0" name="count" id="count">
         <input type="hidden" name="isInputmavin" id="isInputmavin" value="0">
         <input type="hidden" name="orderNo" id="orderNo">
        </td></tr>
       </table>
     </td>
    </tr>

 

 

function form111(pid){
   var imgdiv = $("#imgdiv"+pid);
   var mdiv = $("#mdiv");
   $.post('contentManage.do?method=deleteFileUp&tatid='+pid,null,function callback1(data){});
   imgdiv.hide();
   //mdiv.text("删除成功!").css("color","red");
  }

 

down.jsp下载页面

 

 <%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="com.jspsmart.upload.SmartUpload"%>

<%
 //下载文件页面
 SmartUpload down = new SmartUpload();
 //初始化环境
 down.initialize(pageContext);
 
 //得到下载文件参数名称
 String file =(String)request.getParameter("file");
 
 //重新设置字符编码 如果有必要
 //file = new String(file.getBytes("ISO8859_1-1"),"GBK");

  try{   
   down.setContentDisposition(null);
   String descFileName = file;
   byte[] b = descFileName.getBytes();
   char[] c = new char[b.length];
   for (int x = 0; x < b.length; x++)c[x] = (char) (b[x] & 0x00FF);
   descFileName = new String(c);
   down.downloadFile(file,"text/xml/txt",descFileName);
   out.clear();
   out = pageContext.pushBody();
 }catch(Exception ex){
  System.out.println("下载文件失败!<br>");
  out.println("下载文件失败!<br>");
  out.println("错误原因:<br>"+ex.toString());
 }
%>

---

<a href="<%=request.getContextPath()%>/background/contentManage/view/down.jsp?file=${hurl}${listatt.attachFile}">下载</a></td>

=========

 

 

 懒得敲代码。写的拿过来放这里。用时。直接用。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值