java文件轉發


  實際開發情景中,有時會遇到文件需要從一台服務器發到另一台服務器的情況,比如外網發到內網,服務器之間文件同步的情況。

  就可以用文件轉發。

  轉發端代碼:

/**
     * 
     * @param fileName 保存文件名
     * @param filePath 保存本地的文件路徑
     * @param url 目標服務器的地址
     */
    @SuppressWarnings("static-access")
    public void relay(String fileName,String filePath,String url){
        url = url+"?name="+fileName +"&uploadDir="+uploadDir;
        
        //文件轉發
        byte[] buffer = this.File2byte(filePath);
        
        StringBuilder sb2 = null;
        String BOUNDARY = java.util.UUID.randomUUID().toString();
        //String PREFIX = "--", LINEND = "\r\n";
        String MULTIPART_FROM_DATA = "multipart/form-data";

        URL uri = null;
        try {
            uri = new URL(url);
            HttpURLConnection conn= null;
            try {
                conn = (HttpURLConnection) uri.openConnection();
                conn.setReadTimeout(60 * 1000); // 緩存的最長時間
                conn.setDoInput(true);// 允許輸入
                conn.setDoOutput(true);// 允許輸出
                conn.setUseCaches(false); // 不允許使用緩存
                conn.setRequestMethod("POST");
                conn.setRequestProperty("connection", "keep-alive");
                conn.setRequestProperty("Charsert", "UTF-8");
                conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
                
                DataOutputStream outStream;
                outStream = new DataOutputStream(conn.getOutputStream());
                InputStream in = null;
                
                // 發送文件數據
                outStream.write(buffer);
                // 得到響應碼
                int res = conn.getResponseCode();
                if (res == 200){
                    in = conn.getInputStream();
                    int ch;
                    sb2 = new StringBuilder();
                    while ((ch = in.read()) != -1){
                        sb2.append((char) ch);
                    }
                }
                outStream.close();
                conn.disconnect();
                
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

  接收端代碼:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.centit.cmip.sdk.common.utils.DateUtil;

/**
 * <p>轉發文件接收<p>
 * @version 1.0
 * @author li_hao
 * @date 2017年12月15日
 */
@WebServlet("/receiveServlet")
@SuppressWarnings("serial")
public class ReceiveServlet extends HttpServlet{
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
    
    
    public void doPost(HttpServletRequest request, HttpServletResponse response){
        InputStream is = null;
        FileOutputStream outputStream = null;
        try {
            String fileName = request.getParameter("name");
            String uploadDir = request.getParameter("uploadDir");
            String storePath = "/resource/upload/" + DateUtil.current("yyyy-MM-dd")+"/" +fileName;
            String realFile = uploadDir + storePath;
            
            File file = new File(realFile);
            if (!file.getParentFile().exists()){
                file.getParentFile().mkdirs();
            }
            is = request.getInputStream();
            outputStream = new FileOutputStream(file);
            writeIntoOut(is,outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
                outputStream.flush();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    private void writeIntoOut(InputStream ins, OutputStream out) {
        byte[] bb = new byte[10 * 1024];
        try {
            int cnt = ins.read(bb);
            while (cnt > 0) {
                out.write(bb, 0, cnt);
                cnt = ins.read(bb);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ins.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM