제목 그대로 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());
반응형
댓글