SmbFile (如何做共享文件上传功能)

1.组件上传的插件 ajaxfileupload.js,上面是官方的例子
第一个链接是官方的的javascript
http://www.phpletter.com/our-projects/ajaxfileupload/
第二个链接是网上找到的demo,我就不贴上我的的demo啦,差不多
http://www.phpletter.com/our-projects/ajaxfileupload/
2.将上传的文件通过SmbFile传送到共享文件夹,我说一下思路
第一步 现将上传的文件保存到数据库,数据库的字段有三个 (orderId,fileName,fileId)
第二步 通过SmbFile将文件传送到共享文件夹
3.需要文件上传的地方用iframe
4.列出配置文件,Action核心代码,SmbService核心代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<constant name="struts.custom.i18n.resources" value="message"></constant>

	<package name="struts2" namespace="/pages/common" extends="json-default">

		<action name="upfileAction" class="com.bq.web.action.UpfileAction">
			<param name="fileSavePath">/upload</param>
			
			<result type="json">
				<param name="contentType">text/html</param>
			</result>
			
			<result name="fileList">/pages/common/commonUpfile.jsp</result>
			<result name="fileListOEM">/pages/common/commonUpfileOEM.jsp</result>
			<result name="error">/pages/error.jsp</result>
			<result name="download" type="stream">/pages/common/commonUpfile.jsp</result>
			
			<result name="success" type="stream">
				<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
				<param name="inputName">inputStream</param>
				<param name="contentDisposition">
					attachment;filename="${downloadChineseFileName}"
               </param>
				<param name="bufferSize">4096</param>
			</result>
			
			<result name="transfers" type="stream">
				<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
				<param name="inputName">transferInputStream</param>
				<param name="contentDisposition">
					attachment;filename="data.csv"
               </param>
				<param name="bufferSize">4096</param>
			</result>
			
			<result name="downloadvba" type="stream">
				<param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
				<param name="inputName">outputStream</param>
				<param name="contentDisposition">
					attachment;filename="${filename}"
               </param>
				<param name="bufferSize">4096</param>
			</result>			
			
		</action>
				
	</package>

</struts>
	public String getDownloadChineseFileName(){
		
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		String downloadChineseFileName = filename;  
		
		try {
			OrderFileRecord r=new OrderFileRecord();
			r.setOrderId(orderId);
			r.setFileId(fileId);
			List<OrderFileRecord> list=orderFileRecordService.queryOrderFileRecord(r);
			if(list!=null&&list.size()>=0){
				downloadChineseFileName=list.get(0).getFileName();
			}
			
//			response.setHeader("charset","ISO8859-1");
			downloadChineseFileName= new String(downloadChineseFileName.getBytes("GB2312"), "ISO8859-1"); 
			downloadChineseFileName=downloadChineseFileName;
//			if(downloadChineseFileName.length()>17){
//				filename=downloadChineseFileName.substring(downloadChineseFileName.lastIndexOf("."),downloadChineseFileName.length());
//				downloadChineseFileName=downloadChineseFileName.substring(0,13)+"..."+filename;
//			}
			//downloadChineseFileName=new String(downloadChineseFileName.getBytes(), "UTF-8");
		//	downloadChineseFileName=java.net.URLEncoder.encode(downloadChineseFileName, "UTF-8"); 
			
			 
//		    response.setHeader( "Content-Disposition", "attachment;filename="  +  downloadChineseFileName);
		}catch(Exception e){
			e.printStackTrace();
		}
		return downloadChineseFileName;
	 }

	public InputStream getInputStream() throws Exception{
		
		return SmbService.getFile(getFileSavePath()+"/"+orderId+"/"+ fileId);
//		String filePath=getFileSavePath().replaceAll("\\\\", "/")+ "/" +orderId+"/"+ fileId;
//		FileInputStream fos = new FileInputStream(filePath);
//		return fos;
//		return ServletActionContext.getServletContext().getResourceAsStream("/" + fileId);
	}
	
	
      public InputStream getTransferInputStream() throws Exception{
    	if(filename==null){
    		filename="";
    	}
    	filename=filename.replaceAll("\"\r\n\"", "\"\r\n=\"");
    	InputStream   inputStream   =   new   ByteArrayInputStream(filename.getBytes());
    	
//    	new OutputStreamWriter(null,");
		return inputStream;
	  }
     
      
    public InputStream getOutputStream() throws Exception{
    	InputStream   inputStream = null;
  		try{
  			inputStream = SmbService.getVBAFile( filename);
  			 
  		//	File f = new File(SmbService.smbVBAFilePathConfig + filename);
  		//	inputStream = new FileInputStream(f	 )  ;
  			
  		}catch(Exception e){
  			logger.error(e.getMessage());
  			logger.error(e.getStackTrace());
  			
  		}
  		return inputStream;
 
  	}
     public String downloadvba(){
    	// File f = new File(SmbService.smbVBAFilePathConfig + filename);
    	 
    	 SmbFile f = null;
		try {
			f = new SmbFile(SmbService.smbVBAFilePathConfig+filename);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		if(f==null  ){
   		 this.addActionError("File does not exit!");
   		 return "error";
		}
    	
    	 return "downloadvba";
     }
	
	public String transfers(){
		HttpServletRequest request = ServletActionContext.getRequest ();
		
		HttpServletResponse response= ServletActionContext.getResponse();
		filename=filename.replaceAll("\"\r\n\"", "\"\r\n=\"");

		try
		{


		//如果無 out.clear(); 因重複會java.lang.IllegalStateException:
		response.setContentType( "application/octet-stream"); 
		response.setHeader("Content-disposition","attachment; filename=data.csv");

		//response.setHeader will popup a screen ask where the new file save as, 用response.setHeader會出現popup問CSV會save去那

		OutputStreamWriter ow = new OutputStreamWriter(response.getOutputStream(),"GB2312");

		//用outputStreamWriter set CSV TO UTF-16LE 這樣excel 開時不會有乱码問題
//		ow.write(0xFEFF);//一定要加
	    ow.write(filename);
	    
	    ow.flush(); 
	    ow.close();
	    response.getWriter().flush();
	    response.getWriter().close();
	    
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
//		return "transfers";
	}

	public String execute() {
		return "success";
	}

	public void setFileSavePath(String fileSavePath) {
		this.fileSavePath = fileSavePath;
	}
	

	public void upload() throws Exception {
		if (null == getOrderId() || "".equals(getOrderId())) {
			return;
		}
		if (null == filename || "".equals(filename)) {
			return;
		}
		if (null == xls) {
			return;
		}

		OrderFileRecord r = new OrderFileRecord();
		r.setFileName(filename);
		r.setOrderId(orderId);
		List l = orderFileRecordService.queryOrderFileRecord(r);

		if (null != l && l.size() > 0) {
			OrderFileRecord ofr = (OrderFileRecord) l.get(0);
			deleteRecord(ofr.getFileId(), ofr.getOrderId());
			orderFileRecordService.deleteOrderFileRecord(ofr);
		}

		try {

			uploadService.uploadFile(this.getXls(), orderId, getFileSavePath(),filename);
//			SmbService.putFile(orderId+"/"+ fileId, this.getXls());

			HttpServletResponse response = Struts2Utils.getResponse();
			response.setContentType("text/html;charset=utf-8");
			response.setCharacterEncoding("utf-8");
			response.setHeader("Charset", "utf-8");
			response.setHeader("Cache-Control", "no-cache");

		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e);
			return;
		}

		return;
	}
	
	String getJsonFileNameTableRow(){
		
		if(getOrderId()==null||"".equals(getOrderId())){
			return "";
		}
		
		OrderFileRecord r=new OrderFileRecord();
		r.setOrderId(getOrderId());
		List l=orderFileRecordList=orderFileRecordService.queryOrderFileRecord(r);
		
		if(null==l||l.size()>0){
			OrderFileRecord vd=(OrderFileRecord)l.get(0);
		}
		
		return "";
	}
	
	public String deleteRecord(String fileId,String orderId){
		
		if(fileId==null||"".equals(fileId)){
			return queryOrderFile();
		}else if(getOrderId()==null||"".equals(getOrderId())){
			return queryOrderFile();
		}
		fileId=fileId.trim();
		orderId=orderId.trim();
		String filePath=getFileSavePath()+"/"+orderId+"/"+ fileId;
//		String filePath=getFileSavePath().replaceAll("\\\\", "/")+ "/" +orderId+"/"+ fileId;
//		deleteFile(filePath);
		SmbService.deleteFile(filePath);
		
		OrderFileRecord r=new OrderFileRecord();
		r.setOrderId(getOrderId());
		r.setFileId(fileId);
		
		orderFileRecordService.deleteOrderFileRecord(r);
		return queryOrderFile();
	}
	
	
	public String deleteRecordOEM(String fileId,String orderId){
		
		if(fileId==null||"".equals(fileId)){
			return queryOrderFile();
		}else if(getOrderId()==null||"".equals(getOrderId())){
			return queryOrderFile();
		}
		fileId=fileId.trim();
		orderId=orderId.trim();
		String filePath=getFileSavePath()+"/"+orderId+"/"+ fileId;
//		String filePath=getFileSavePath().replaceAll("\\\\", "/")+ "/" +orderId+"/"+ fileId;
//		deleteFile(filePath);
		SmbService.deleteFile(filePath);
		
		OrderFileRecord r=new OrderFileRecord();
		r.setOrderId(getOrderId());
		r.setFileId(fileId);
		
		orderFileRecordService.deleteOrderFileRecord(r);
		return queryOrderFileOEM();
	}
	
   public String deleteRecord(){
		
	   if (null != orderId) {
		   orderId=orderId.trim();
		}
		if (null == fileId) {
			fileId=fileId.trim();
		}
	   
		return deleteRecord(fileId,orderId);
	}
   
   public String deleteRecordOEM(){
		
	   if (null != orderId) {
		   orderId=orderId.trim();
		}
		if (null == fileId) {
			fileId=fileId.trim();
		}
	   
		return deleteRecordOEM(fileId,orderId);
	}
	
	@Deprecated
	 /**   
     * 删除单个文件   
     * @param   fileName    被删除文件的文件名   
     * @return 单个文件删除成功返回true,否则返回false   
     */    
    public static boolean deleteFile(String fileName){     
        File file = new File(fileName);     
        if(file.isFile() && file.exists()){     
            file.delete();     
            logger.debug("删除单个文件"+fileName+"成功!");     
            return true;     
        }else{     
        	logger.debug("删除单个文件"+fileName+"失败!");     
            return false;     
        }     
    }    
	
	public String queryOrderFile(){
		if(getOrderId()==null){
			return fileList;
		}
		OrderFileRecord r=new OrderFileRecord();
		r.setOrderId(getOrderId().trim());
		orderFileRecordList=orderFileRecordService.queryOrderFileRecord(r);
		return fileList;
	}
	
	private boolean flagOEM=false;
	
	public String queryOrderFileOEM(){
		if(getOrderId()==null){
			return "fileListOEM";
		}
		OrderFileRecord r=new OrderFileRecord();
		r.setOrderId(getOrderId().trim());
		orderFileRecordList=orderFileRecordService.queryOrderFileRecord(r);
		
		if(orderFileRecordList!=null&&orderFileRecordList.size()==1) {
			flagOEM=true;
		}
		
		return "fileListOEM";
	}
package com.bq.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;

import com.bq.exception.CommDevException;

public class SmbService {

	public static String serverFilePathConfig; //"smb://域名;用户名:密码@ip/BPM/";
	public static String smbVBAFilePathConfig;
	public static String smb2DcodePathConfig;
	
	

	public static void putFile(String serverFilePath, File localFile) {
		SmbFile f;
		try {
			f = new SmbFile(serverFilePathConfig+serverFilePath);
			String parentPath=f.getParent();
			if(!f.exists())
			{
			    SmbFile parentSmb=new SmbFile(parentPath);
			    if(!parentSmb.exists())
			    	parentSmb.mkdirs();
			}
			FileInputStream in = new FileInputStream(localFile);
			SmbFileOutputStream out = new SmbFileOutputStream(f);

			long t0 = System.currentTimeMillis();

			byte[] b = new byte[8192];
			int n, tot = 0;
			while ((n = in.read(b)) > 0) {
				out.write(b, 0, n);
				tot += n;
				System.out.print('#');
			}

			long t = System.currentTimeMillis() - t0;

			System.out.println();
			System.out.println(tot + " bytes transfered in " + (t / 1000) + " seconds at "
					+ ((tot / 1000) / Math.max(1, (t / 1000))) + "Kbytes/sec");

			in.close();
			out.close();

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new CommDevException("Put file fail");
		}
	}

	public static InputStream getFile(String serverFilePath) {

		try {
			SmbFile smbfile = new SmbFile(serverFilePathConfig+serverFilePath);
			SmbFileInputStream in = new SmbFileInputStream(smbfile);
			return in;
		} catch (Exception ex) {
			ex.printStackTrace();
			throw new CommDevException("Get file fail");
		}
	}

	public static void deleteFile(String filePath)
	{
		try {
			SmbFile smbfile = new SmbFile(serverFilePathConfig+filePath);
			smbfile.delete();
		} catch (Exception ex) {
			ex.printStackTrace();
			throw new CommDevException("Get file fail");
		}
	}

	public  String getServerFilePathConfig() {
		return serverFilePathConfig;
	}

	public static InputStream getVBAFile(String serverFilePath) {

		try {
			SmbFile smbfile = new SmbFile(smbVBAFilePathConfig+serverFilePath);
			SmbFileInputStream in = new SmbFileInputStream(smbfile);
			return in;
		} catch (Exception ex) {
			ex.printStackTrace();
			throw new CommDevException("Get file fail");
		}
	}
	
	
	
	public void setServerFilePathConfig(String serverFilePathConfig) {
		SmbService.serverFilePathConfig = serverFilePathConfig;
	}

	public  String getSmbVBAFilePathConfig() {
		return smbVBAFilePathConfig;
	}

	public  void setSmbVBAFilePathConfig(String smbVBAFilePathConfig) {
		SmbService.smbVBAFilePathConfig = smbVBAFilePathConfig;
	}
	public  String getSmb2DcodePathConfig() {
		return smb2DcodePathConfig;
	}

	public static void setSmb2DcodePathConfig(String smb2DcodePathConfig) {
		SmbService.smb2DcodePathConfig = smb2DcodePathConfig;
	}
	
}

你可能感兴趣的:(SmbFile)