#postgresql #spring-boot #spring-data-jpa #bytea
#postgresql #spring-boot #spring-data-jpa #bytea
Вопрос:
Я пытаюсь загрузить файл размером ~ 700 МБ и загрузить его через REST API в Spring boot с Postgres в качестве базы данных. Я знаю, что Postgres — это не тот путь, но, тем не менее, я пытаюсь решить его как есть.
Загрузка REST работает после того, как я добавил -Xmx2024m в виртуальную машину во время работы. Загрузка REST выдает ошибку при вызове uploadObjectEntityRepository.findById(id)
:
Caused by: org.postgresql.util.PSQLException: ERROR: invalid memory alloc request size 1381847031
Ошибка будет означать, что данные загружены, но служба загрузки завершилась чисто. Во время загрузки в журнале Postgres также не было ошибок. В базе данных поле data
имеет тип bytea
.
В чем может быть проблема?
Сокращенный код:
@Entity
@Table(name = "UploadObjectEntity")
public class UploadObjectEntity implements Serializable {
...
@Lob
@Column(name = "data", nullable = false)
private byte[] data;
...
}
@PostMapping("/upload")
public ResponseEntity<UploadObject> upload(@RequestPart MultipartFile file){
...
UploadObject o = customService.saveUploadObject(file);
...
}
@RequestMapping(value = "/download/{id}", method = RequestMethod.GET)
public void getByteArray(@PathVariable("id") Long id, HttpServletResponse response) {
UploadObject uploadObject = customService.load(id);
ByteSource byteSource = ByteSource.wrap(uploadObject.getData());
InputStream stream = byteSource.openStream();
response.setContentType(...);
response.setContentLength(...);
IOUtils.copy(stream, response.getOutputStream());
}
//Custom Service
public UploadObject saveUploadObject(MultipartFile file) {
...
UploadObjectEntity uploadObjectEntity = new UploadObjectEntity();
uploadObjectEntity.setData(file.getBytes());
...
uploadObjectEntity = uploadObjectEntityRepository.save(uploadObjectEntity);
return uploadObjectEntityMapper.toDto(uploadObjectEntity);
}
public UploadObject load(Long id) {
return uploadObjectEntityRepository.findById(id).map(uploadObjectEntityMapper::toDto);
}
Ответ №1:
Добавьте свой код application.properties
spring.http.multipart.max-file-size=1000MB
spring.http.multipart.max-request-size=1000MB