# URL 경로의 파일을 다운로드, 서비스 활용


> 용도
 - URL 위치의 파일(웹페이지 포함)을 특정 위치에 다운로드
   (파일을 다운로드 하고 원하는 위치에 업로드 하는 작업
축소)

> 활용

 - 다운로드된 파일을 즉시 웹(블로그)으로 서비스 하고자 할때.
 - DBMS 저장, 웹 또는 개인 블로그에서 외부 공개및 비공개로 활용
 - 디렉토리명을 일자별 변경하여 파일 그룹 관리


> 사용 라이브러리
Apache Tika


FileUrlDownload.java
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;

import org.apache.tika.Tika;

import bean.FileBean;

/**
 * # URL상의 파일을 다운로드, DBMS에 저장
 */
public class FileUrlDownload {
    final static int bufferSize = 1024;

    /**
     * # URL 경로의 파일 다운로드
     */
    public static int fileUrlReadAndDownload(String fileUrl, 
                                   String localFileName, String downloadDir) {
        OutputStream outStream = null;
        URLConnection uCon = null;

        InputStream is = null;
        int byteWritten = 0;
        try {

            URL Url;
            byte[] buf;
            int byteRead;
            Url = new URL(fileUrl);
                    outStream = new BufferedOutputStream(
             new FileOutputStream(downloadDir + File.separator + URLDecoder.decode(
             localFileName, "UTF-8")));

                    uCon = Url.openConnection();
                    is = uCon.getInputStream();
                    buf = new byte[bufferSize];
                    while ((byteRead = is.read(buf)) != -1) {
                        outStream.write(buf, 0, byteRead);
                        byteWritten += byteRead;
                    }

                    System.out.println("Download Successfully.");
                    System.out.println("File name : " + localFileName);
                    System.out.println("of bytes  : " + byteWritten);
                    System.out.println("-------Download End--------");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
                outStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return byteWritten;
    }

    /**
     * # 다운로드된 파일 정보를 Bean 클래스에 저장
     *  - DBMS에 저장및 정보 활용을 위함.
     */
    public static FileBean setUrlFileSave(String fileUrl, String downloadDir) {
        FileBean fileBean = new FileBean();
        int fileSize = 0;
        
        int slashIndex = fileUrl.lastIndexOf('/');
        int periodIndex = fileUrl.lastIndexOf('.');

        // 파일 경로에서 마지막 파일명을 추출
        String fileName = fileUrl.substring(slashIndex + 1);
        String filePath = downloadDir+File.separator+fileName;

        if (periodIndex >= 1 && slashIndex >= 0
                && slashIndex < fileUrl.length() - 1) {
            fileSize = fileUrlReadAndDownload(fileUrl, fileName, downloadDir);
        }

        fileBean.setFileName(fileName);
        fileBean.setFilePath(filePath);
        fileBean.setFileSize(fileSize);
        String mimeType = null;
        Tika tika = new Tika(); // 파일의 Mime-Type 추출
        try {
            mimeType = tika.detect(new File(filePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        fileBean.setFileType(mimeType); // 파일 Mime-Type
        
        return fileBean;
    }

    /**
     * # main
     */
    public static void main(String[] args) {

        // 파일 URL
        String fileUrl = "";

        // 다운로드 디렉토리
        String downDir = "data";

        /*
         * 파일 다운로드및 파일 정보를 저장하여 서비스 활용
        */
        setUrlFileSave(fileUrl, downDir);

    }
}


FileBean.java
/**
 * # 파일 정보를 담을 Bean 클래스
 */
public class FileBean {
    private int fileSeq; // 파일 번호
    private String fileName; // 파일 명
    private String fileMemo; // 파일 정보
    private String fileType; // 파일 타입
    private int fileSize; // 파일 사이즈
    private String filePath; // 업로드 된 파일 경로
    private String filePathOrg; // 실제 파일 경로 : URL 정보
    private int isOpen; // 공개여부
    private String createDate; // 생성일자
    private String createId; // 생성자 아이디
    
    public String toString(){
        StringBuffer sb = new StringBuffer();
        sb.append("### FileBean.toString() ###");
        sb.append(" fileSeq :"+ this.fileSeq);
        sb.append(" fileName :"+ this.fileName);
        sb.append(" fileMemo :"+ this.fileMemo);
        sb.append(" fileType :"+ this.fileType);
        sb.append(" fileSize :"+ this.fileSize);
        sb.append(" filePath :"+ this.filePath);
        sb.append(" filePathOrg :"+ this.filePathOrg);
        sb.append(" isOpen :"+ this.isOpen);
        sb.append(" createDate :"+ this.createDate);
        sb.append(" createId :"+ this.createId);
        return sb.toString();
    }
    
    public String getFilePathOrg() {
        return filePathOrg;
    }

    public void setFilePathOrg(String filePathOrg) {
        this.filePathOrg = filePathOrg;
    }

    public String getCreateId() {
        return createId;
    }

    public void setCreateId(String createId) {
        this.createId = createId;
    }

    public int getFileSeq() {
        return fileSeq;
    }

    public void setFileSeq(int fileSeq) {
        this.fileSeq = fileSeq;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getFileMemo() {
        return fileMemo;
    }

    public void setFileMemo(String fileMemo) {
        this.fileMemo = fileMemo;
    }

    public String getFileType() {
        return fileType;
    }

    public void setFileType(String fileType) {
        this.fileType = fileType;
    }

    public int getFileSize() {
        return fileSize;
    }

    public void setFileSize(int fileSize) {
        this.fileSize = fileSize;
    }

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public int getIsOpen() {
        return isOpen;
    }

    public void setIsOpen(int isOpen) {
        this.isOpen = isOpen;
    }

    public String getCreateDate() {
        return createDate;
    }

    public void setCreateDate(String createDate) {
        this.createDate = createDate;
    }
}

※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
08 31, 2013 16:45 08 31, 2013 16:45


Trackback URL : http://develop.sunshiny.co.kr/trackback/950

Leave a comment


Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. chatbots chatbots %M
  2. london relocation agents london relocation agents %M
  3. how to build chatbot how to build chatbot %M
  4. advanced chatbot advanced chatbot %M
  5. facebook ai chatbot facebook ai chatbot %M

Calendar

«   08 2019   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2660974 HIT
TODAY 1290 HIT
YESTERDAY 1540 HIT