구일일구 2023. 4. 18. 13:43
반응형

 

String dbpath = String.valueOf(File.separator) + YYYYMM;
String path = String.valueOf(SitePath.UploadDirectory) + dbpath;

dbpath - 경로 디렉토리 구분자(\) + 연도월 추가함 ( \202304 )

path - 파일들이 올라가는 폴더 + dbpath ( c:\\attch\\netis\\\202304 )


File dir = new File(path);

dir - File uri 경로에 대한 파일의 File 객체 생성


if(!dir.isDirectory())
    dir.mkdirs();
FileVO fileVo = new FileVO();

dir.isDirectory() - 해당 경로가 폴더인지의 여부를 리턴함

dir.mkdirs() - 해당 경로에 폴더 만들기

(해당 경로가 폴더가 아닌 경우에, 폴더를 만들어라)

FileVO fileVo = new FileVO() - FileVO에 대한 객체 생성


fileVo.originName = ConvertTool.cleanFileName(mfile.getOriginalFilename());
fileVo.uuidName = UUID.randomUUID().toString();
fileVo.Size = Long.valueOf(mfile.getSize());
fileVo.Ext = ConvertTool.toString(fileVo.originName.substring(fileVo.originName.lastIndexOf('.') + 1, fileVo.originName.length()));
fileVo.ServerFile = String.valueOf(dbpath) + File.separator.fileVo.uuidName;

fileVo.originName - 파일에서 확장자를 포함한 파일의 이름을 반환함 (안녕.txt)
fileVo.uuidName- 네트워크상에서 고유성을 보장하는 ID를 만들기 위함. (originName을 유일하게 만들어줌) ( ef3b3bcf-882d-49c7-a3f8-3f756444b29e) 
fileVo.Size - 파일의 크기 가져오기 (2050)
fileVo.Ext - 파일 확장자 가져오기 (txt)
fileVo.ServerFile  - dbpath + \ + uuid이름: 파일이 들어갈 폴더와 uuid로 저장되는 파일 이름까지 (\202304\ef3b3bcf-882d-49c7-a3f8-3f756444b29e) 


File serverFile = new File(String.valueOf(path) + File.separator + fileVo.uuidName);
long size = fileVo.Size.longValue();

File serverFile - 파일이 저장되는 경로 (파일이름까지) (c:\\attch\\netis\\\202304\ef3b3bcf-882d-49c7-a3f8-3f756444b29e)
long size - 파일 사이즈를 long 값으로 반환


if(size > SitePath.fileMaxSize){
    System.out.prinln('파일용량초과');
    fileVo = null;
    return null;
}

사이즈가 정해놓은 최대크기보다 크다면, fileVo를 null로 만들고 return도 null값으로


String originLowName = fileVo.originName.toLowerCase();
Boolean bext = Boolean.valueOf(false);
if(originLowName != null){
    String[] exts = SitePath.fileExt.split(",");
    byte b;
    int i;
    String[] arrayOfString1;
    for (i=(arrayOfString1 = exts).length, b=0; b<i;){
        String strext = arrayOfString1[b];
        if(originLowName.endsWith(strext))
            bext = Boolean.valueOf(true);
        b++;
    }
}

String originLowName - 파일원래이름을 소문자처리
Boolean bext - 현재는 false 

if(파일 원래 이름이  있을때){
    exts[ ]  - 업로드할 수 있는 파일확장자명들을 , 로 잘라서 배열에 넣기
    arrayofString1 [ ] 이란 배열 생성 (결국 exts[]랑 같음)  ??같은데 왜 하나 더 만든걸까? 
    for(i = 업로드 가능한 확장자명 개수, b=0, b < i ){ //그리고 arrayOfString1에 업로드가능한 확장자명 배열 넣기
        strext - String 배열에 있는 값들 하나씩 넣기
        if(파일원래이름이 strext에 있는 값에 끝나는게 맞는지)
            bext - true로 변경
            b ++;
    }
    if(true가 아니라면){
        파일확장자 사용불가함
        fileVO = null처리
        return 도 null처리
    }

}

if (bext.booleanValue())
    try {
        InputStream fileStream = mfile.getInputStream();
        FileUtils.copyInputStreamToFile(fileStream, serverFile);
    } catch (IllegalStateException e) {
        log.info("업로드 에러1 : " + e.getMessage());
        fileVo = null;
        return null;
    } catch (IOException e) {
        log.info("업로드 에러2 : " + e.getMessage());
        fileVo = null;
        return null;
    } 
return fileVo;

위에서 만든대로, 파일확장자가 맞다면 bext.booleanValue가 true가 된다.InputStream 객체를 생성하여, 업로드한 파일의 바이트를 저장함.copyInputStreamToFile() 메서드를 이용하여, inputStream에서 데이터를 읽은 후, serverFile에 파일을 저장함저장한 fileVO를 리턴하면 끗


FileInputStream 는 InputStream 를 상속받았으며, 파일로 부터 바이트로 입력받아, 바이트 단위로 출력할 수 있는 클래스이다. FileInputStream 를 생성할 수 있는 방법으로는 다음 같이 존재한다.

반응형