파일업로드 형식, 관련 메소드

Back-End/Spring 2019. 6. 17. 18:07
728x90
반응형

파일업로드


스프링 프레임워크의 내장객체


SPRING / 파일업로드 적용방법



- pom.xml 설정 -


maven build를 위해서 pom.xml 파일에 commons-fileupload.jar 과 commons-io.jar 파일을 추가

<!-- MultipartHttpServletRequset -->
<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.0.1</version>
    </dependency>

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>
</dependencies>



- spring-context.xml 설정 (spring bean 설정) -


1. CommonsMultipartResolver 는 스프링 프레임 워크에 내장되어 있음


2. property -> maxUploadSize : 파일 업로드 시 최대로 올릴 수 있는 파일 사이즈 (파일의 용량)


3. property -> maxlnMemorySize  : 적용된 경로에 최대로 저장할 수 있는 파일 사이즈

<!-- MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000000"/>  <!-- 10MB-->
    <property name="maxInMemorySize" value="100000000"/> <!-- 10MB-->
</bean>



-jsp 설정 (화면)-


1. form 태그의 enctype을 multipart / form-data로 설정해줘야 파일업로드 기능이 적용된다.


2. input 값에 대한 타입은 file로 적용해야 한다.

<!-- form enctype="multipart/form-data"를 적어줘야 한다. -->
<form method="post" action="<c:url value='/regFile'/>"                                                                                enctype="multipart/form-data">
    <!-- input type="file" 이라고 꼭 적어줘야 함 -->
    <input type="file" class="form-control" id="uploadFile"          
    name="uploadFile" />
    <button type="submit" class="btn btn-default">저장</button>
    <button type="list" class="btn btn-default">목록</button>
</form>



java 설정 (서버) - 준비


* 업로드한 파일의 경로가 도메인 별로 달라지기 때문에 파일 저장 경로를 다르게 지정해야 한다.

public class UtilFile {
    String fileName = "";

    //  fileUpload() 메소드에서 전체 경로를 DB에 경로 그대로 저장 한다.  
    public String fileUpload(MultipartHttpServletRequest request,
    MultipartFile uploadFile,Object obj) {
        String path = "";
        String fileName = "";

        OutputStream out = null;
        PrintWriter printWriter = null;

        try {
            fileName = uploadFile.getOriginalFilename();
            byte[] bytes = uploadFile.getBytes();
            path  = getServletContext().getRealPath("/") + files/;

            File file = new File(path);

            // 파일명을 중복체크
            if (fileName != null && !fileName.equals("")) {
                if (file.exists()) {
            // 파일명 앞에 구분(예)업로드 시간 초 단위)을 주어 파일명 중복을 방지한다.
                fileName = System.currentTimeMillis() + "_" + fileName;
                file = new File(path + fileName);
                }
            }
            out = new FileOutputStream(file);

            out.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (printWriter != null) {
                    printWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return path + fileName;
    }



java 설정 (서버) - 적용


@Controller
public class RewardController {
    // 파일을 업로드하는 컨트롤러 클래스 메소드
    @RequestMapping(value = "re/add", method = RequestMethod.POST)
    // 인자로 MulfiPartFile 객체,
    MultipartHttpServletRequest 객체, 업로드 하려는 도메인 클래스를 받는다

    public String reAddProCtrl(@RequestParam("uploadFile")                                                                              MultipartFile uploadFile, MultipartHttpServletRequest request, Reward reward) {
    //UtilFile 객체 생성
    UtilFile utilFile = new UtilFile();
    //파일 업로드 결과값을 path로 받아온다
    String uploadPath=utilFile.fileUpload(request,uploadFile,                     
    reward);

     // 해당 경로만 받아 db에 저장한다.
     int n = rewardService.reAddServ(uploadPath, reward);
     return "isg/Boardlist";
    }
}


출처

http://www.incodom.kr/spring/%ED%8C%8C%EC%9D%BC%EC%97%85%EB%A1%9C%EB%93%9C#h_c37566d71129dd68628fc71b2b2e2a15



-File 파일 업로드 관련 클래스-




 
facebook에 글올리기 
 
 

File 클래스 정리


java.io 패키지는 기존의 파일이나 폴더에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다. 


이 클래스를 이용해서 파일과 폴더에 대한 다양한 기능을 제공한다.


파일을 나타내는 객체를 생성하려면 다음과 같은 File 클래스의 생성자 함수를 이용한다.


* File 클래스의 생성자


File 클래스의 생성자 

 설명

File(File parent, String Child) 

 parent 객체 폴더의 child 라는 파일에 대한 File 객체를 생성한다.

File(String pathname) 

 pathname에 해당되는 파일의 File 객체를 생성한다. 

File(String parent, String, child) 

 parent 폴더 경로의 child라는 파일에 대한 File 객체를 생성한다.

File(URI uri)

 file uri 경로에 대한 파일의 File 객체를 생성한다. 


* File 클래스의 메소드


File 클래스의 메소드 

설명 

 File getAbsoluteFile()

 파일의 절대 경로를 넘겨준다. 

 String getAbsolutePath() 

 파일의 절대 경로를 문자열로 넘겨준다. 

 File getCanonicalFile() 

 파일의 Canonical 경로를 넘겨준다. 

 String getCanonicalPath()

 파일의 Canonical 경로를 문자열로 넘겨준다. 

 String getName()

 파일이나 폴더의 이름을 넘겨준다. 

 String getParent() 

 부모 경로에 대한 경로명을 문자열로 넘겨준다. 

 File getParentFile()

 부모 폴더를 File의 형태로 리턴한다. 

 String getPath() 

 파일의 경로를 문자열의 형태로 리턴한다. 

 long getTotalSpace() 

 하드디스크의 총 용량을 리턴한다.

 long getUsableSpace()

 하드디스크의 사용 가능한 용량을 리턴한다.

 long getFreeSpace()  하드디스크의 남은 공간을 리턴한다.

 int hashCode()

 hash code를 반환한다. 

 long lastModified() 

 해당 경로 파일의 최종 수정 일자를 반환한다. 

 long length()

 해당 경로 파일의 길이를 반환한다. 

 Path toPath()

 java.nio.file.Path 객체로 반환한다. 

 URI toURI() 

 URI 형태로 파일 경로를 반환한다. 

 File[] listRoots()

 하드디스크의 루트 경로를 반환한다. 

 String[] list() 

 경로의 파일들과 폴더를 문자열 배열로 반환한다. 

 String[] list(FilenameFilter filter) 

 filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환한다. 

 File[] listFiles() 

 해당 경로의 파일들과 폴더의 파일을 배열로 반환한다. 

 File[] listFiles(FileFilter filter) 

 filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. 

 File[] listFiles(FilenameFilter filter)

 filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. 


* File 생성/수정/삭제 메소드


File 생성 수정 삭제 메소드 

 설명

 boolean createNewFile()

 주어진 이름의 파일이 없으면 새로 생성한다.

 static File createTempFile(String prefix, String suffix) 

 default temporary-file 디렉토리에 파일 이름에 prefix와 suffix를 붙여  임시파일을 생성한다.

 static File createTempFile(String prefix, String suffix, File directory) 

 새로운 임시파일을 파일 이름에 prefix와 suffix를 붙여 directory 폴더에 생성한다.

 boolean delete()

 파일이나 폴더를 삭제한다. 단, 폴더가 비어있지 않으면 삭제할 수 없다. 

 void deleteOnExit() 

 자바가상머신이 끝날 때 파일을 삭제한다. 

 boolean mkdir()

 해당 경로에 폴더를 만든다. 

 boolean mkdirs() 

 존재하지 않는 부모 폴더까지 포함하여 해당 경로에 폴더를 만든다.

 boolean renameTo(File dest) 

 dest 로 File 이름을 변경한다. 


* File 체크 메소드


 File 체크 메소드 

 설명 

  boolean exists()

 파일의 존재 여부를 리턴한다. 

  boolean isAbsolute() 

 해당 경로가 절대경로인지 여부를 리턴한다.

  boolean isDirectory() 

 해당 경로가 폴더인지 여부를 리턴한다. 

  boolean isFile() 

 해당 경로가 일반 file 인지 여부를 리턴한다.

  boolean isHidden()

 해당 경로가 숨김 file 인지 여부를 리턴한다.


* File 권한 메소드


File 클래스 권한 관련 메소드 

설명 

 boolean canExecute()

 파일을 실행할 수 있는지 여부를 리턴한다.

 boolean canRead() 

 파일을 읽을 수 있는지 여부를 리턴한다. 

 boolean canWrite()

 파일을 쓸 수 있는지 여부를 리턴한다. 

 boolean setExecutable(boolean executable)

 파일 소유자의 실행 권한을 설정한다.

 boolean setExecutable(boolean executable, boolean ownerOnly) 

 파일의 실행 권한을 소유자 또는 모두에 대해 설정한다. 

 boolean setReadable(boolean readable) 

 파일의 소유자의 읽기 권한을 설정한다. 

 boolean setReadable(boolean readable, boolean ownerOnly)

 파일의 읽기 권한을 소유자 또는 모두에 대해 설정한다. 

 boolean setReadOnly()

 파일을 읽기 전용으로 변경한다. 

 boolean setWritable(boolean writable)

 파일의 소유자의 쓰기 권한을 설정한다. 

 boolean setWritable(boolean writable boolean ownerOnly) 

 파일의 쓰기 권한을 소유자 또는 모두에 대해 설정한다



출처: https://hyeonstorage.tistory.com/233 [개발이 하고 싶어요]

728x90
반응형
: