1. 程式人生 > >spring 多檔案上傳

spring 多檔案上傳

 /**
     *  招標多檔案上傳
     * @author zhanglong
     * @param req
     * @param bidorg
     *                招標機構編號
     * @param type
     *                文件類別
     * @param fName
     *                檔案域名稱
     * @return
     * @throws Exception
     */
    
    public List<DataFile>  uploadGNZB(HttpServletRequest req, String bidorg, String type,String fName)throws Exception {
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)req;
    //得到所有的檔案
    List<MultipartFile>   files=new ArrayList<MultipartFile>();
    //根據檔案引數名得到檔案並且他新增到集合中
    for (Iterator  it = multipartRequest.getFileNames(); it.hasNext();) {  
           String key = (String)it.next();  
            MultipartFile file = multipartRequest.getFile(key);  
           if (file.getOriginalFilename().length() > 0) {  
            files.add(file);  
          }  
    }  
    DataFile uf = null;
    InputStream is = null;
    MultipartFile   file=null;
     
    //保留用的(這裡是否要返回List<DataFile>)
    List<DataFile>    ufs=new  ArrayList<DataFile>();
   
    for (int i = 0; i < files.size(); i++) {
    file=files.get(i);
      String contenttype = file.getContentType();
      String filename = getName(file.getOriginalFilename());// .getName());
      long length = file.getSize();
      String filepath = bidorg + "/" + getNextFileName();
      is = file.getInputStream();
      LogMgr.bizlog
      .warn("rootPath:" + rootPath + ",filepath:" + filepath);
      long result = writeToFile(is, rootPath + filepath);
      if (result > 0) {
   uf = new DataFile();
   uf.setBidorg(bidorg);
   uf.setContentType(contenttype);
   uf.setFileName(filename);
   uf.setLength(length);
   uf.setPath(filepath);
   uf.setType(type);
   uf.setGentime(new Date());
   save(uf);
   ufs.add(uf);
      }
 
}
    LogMgr.bizlog.info("檔案上傳成功**************************:");
 
    return ufs;
}


    
    /**
     * 驗證多檔案上傳檔案內容不能為空
     * @param req
     * @param fName
     * @param fileSize 限制的檔案大小
     */
@Override
public boolean validionFiles(HttpServletRequest req, String fName)
throws Exception {
// TODO Auto-generated method stub
return false;
}

    /**
     * 驗證多檔案上傳檔案
     * @param req
     * @param fName
     * @param fileSize 限制的檔案大小
     */
@Override
public boolean validionFiles(HttpServletRequest req, String fName,
long fileSize) throws Exception {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)req;
    //得到所有的檔案
    List<MultipartFile>   files=new ArrayList<MultipartFile>();
    //根據檔案引數名得到檔案並且他新增到集合中
    boolean  flag=true;
    for (Iterator  it = multipartRequest.getFileNames(); it.hasNext();) {  
           String key = (String)it.next();  
            MultipartFile file = multipartRequest.getFile(key);  
            if (file == null) 
        throw new Exception("無效請求引數");
        if(file.getSize()>fileSize)
        flag = false; 
    } 
    return flag; 
}


/**
* 針對不同的供應商檔案多檔案上傳
*/
 
public List<DataFile>  uploadProvinders(HttpServletRequest req, String bidorg, String type,String fName)throws Exception {
   MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)req;
   //得到所有的檔案
   List<MultipartFile>   files=new ArrayList<MultipartFile>();
   //根據檔案引數名得到檔案並且他新增到集合中
   //String  WJ="zbwj";
   for (Iterator  it = multipartRequest.getFileNames(); it.hasNext();) { 
   
   //int  i=0;
   //根據供應商去判讀是否是該供應商
          String key= (String)it.next();
          String  keyW=key.substring(5);
          String  keyQ=type.substring(4);
         
          if(keyW.equalsIgnoreCase(keyQ)){
          MultipartFile file = multipartRequest.getFile(key);  
            if (file.getOriginalFilename().length() > 0) {  
            files.add(file);  
            } 
           
          }
         
        
   }  
   DataFile uf = null;
   InputStream is = null;
   MultipartFile   file=null;
    
   //保留用的(這裡是否要返回List<DataFile>)
   List<DataFile>    ufs=new  ArrayList<DataFile>();
   
   for (int i = 0; i < files.size(); i++) {
   file=files.get(i);
      String contenttype = file.getContentType();
      String filename = getName(file.getOriginalFilename());// .getName());
      long length = file.getSize();
      String filepath = bidorg + "/" + getNextFileName();
      is = file.getInputStream();
      LogMgr.bizlog
      .warn("rootPath:" + rootPath + ",filepath:" + filepath);
      long result = writeToFile(is, rootPath + filepath);
      if (result > 0) {
   uf = new DataFile();
   uf.setBidorg(bidorg);
   uf.setContentType(contenttype);
   uf.setFileName(filename);
   uf.setLength(length);
   uf.setPath(filepath);
   uf.setType(type);
   uf.setGentime(new Date());
   save(uf);
   ufs.add(uf);
      }

}
   LogMgr.bizlog.info("檔案上傳成功**************************:");
 
   return ufs;

}

----------------------------------------------------------------------------------------------------------------------------------------------

   /**
     * 獲取檔案所在的全物理路徑
     * 
     * @param fileId
     * @return
     * @throws Exception
     */
    public String getFilePath(String fileId) throws Exception {
return rootPath + getFile(fileId).getPath();
    }


    public long writeToFile(InputStream is, String filename) {
FileOutputStream fos = null;
byte[] buff = new byte[65536];
long filelength = 0;
try {
   File file = new File(filename);
   LogMgr.bizlog.warn("filename:" + filename);
   file.getParentFile().mkdirs();
   fos = new FileOutputStream(filename);
   int len = is.read(buff);
   while (len > 0) {
fos.write(buff, 0, len);
filelength += len;
len = is.read(buff);
   }
} catch (Exception e) {
   e.printStackTrace();
   LogMgr.bizlog.error("寫入檔案失敗***************************:"
   + e.getMessage() + " e.getCause():" + e.getCause());
   return 0;


} finally {
   try {
if (fos != null) {
   fos.close();
   fos = null;
}
if (is != null) {
   is.close();
   is = null;
}


   } catch (Exception e) {
e.printStackTrace();
LogMgr.bizlog.error("寫入檔案失敗***************************:"
+ e.getMessage() + " e.getCause():" + e.getCause());
   }
}
return filelength;
    }

--------------------------------------

public List find(String sQuery, int start, int size, List values) {
   List ret = new ArrayList();
   Session session = getsession();
//   try{
Query query = session.createQuery(sQuery);
if (values != null && values.size() > 0) {
for (int i = 0, isize = values.size(); i < isize; i ++) {
query.setParameter(i, values.get(i));
}
}
if (start > 0)
query.setFirstResult(start);
if (size > 0)
query.setMaxResults(size);
ret = query.list();