본문 바로가기
Programming/Java_Spring

Spring에서 file upload를 구현하고, DB에 저장 시.. exception발생

by 곰네Zip 2023. 11. 14.

제목 그대로 spring에서, Multipart file을 저장하고, 해당 정보를 DB에 기록한다.

코드는 아래와 같이 구현했다.

private void function(MultipartFile file){
	String fileName = file.getOriginalFilename();
    
    Path saveLoc = Path.get(pathparam1, pathparam2...).resolve(fileName);
    Files.copy( file.getInputStream(), saveLoc, StandardCopyOption.REPLACE_EXISTING);
    ..
    //Save to DB
    Map<String, Object> param = new HashMap();
    param.put("saveLocation", saveLoc);
    param.put("savedFile", saveLoc.getFileName());
    ...
    mapper.insert(param);
}

 모든 코드를 다 넣은 것은 아니고 대략적인 코드는 위와 같이 구현했다. DB는 Mybatis를 사용하여 연동했다.

이제 파일을 저장하려고하면 아래와 같은 에러 메시지를 만났다.

Cannot convert class sun.nio.fs.WindowsPath to SQL type requested due to cohttp://m.mysql.cj.exceptions.WrongArgumentException - Invalid argument value: java.io.NotSerializableException

 

 저 위의 코드에서는 하나 오류가 있다. saveLoc은 Path형태이고, getFileName()도 Path형태가 return된다.

이걸 바로 MyBatis를 통해 저장하려고 하면 위 오류가 발생한다.

 해결책은 Path.toString()을 하여 전달했다. 혹시 특수문자 관련하여 후 처리가 더 필요할 수 있을것도 같아서 그건 좀 더 파보는 것으로

   param.put("saveLocation", saveLoc.toString());
    param.put("savedFile", saveLoc.getFileName().toString());

 

반응형

댓글