Я пытаюсь сохранить изображения (jpg) на моем сервере через мобильное приложение.
Я снимаю изображение с помощью ионной камеры (CameraPreview) и передаю его вОбратный сервис (Spring) через почтовый http метод.
Проблема в формате.Изображения сохраняются правильно, но без какого-либо формата .
Это код камеры для съемки :
takePicture() {
this.cameraPreview.takePicture(this.pictureOpts).then((imageData) => {
this.selectedImage = 'data:image/jpeg;base64,' + imageData;
this.globalDataService.changePictureTaken(this.selectedImage);
this.location.back();
}, (err) => {
console.log(err);
this.selectedImage = 'assets/img/test.jpg';
});
}
это код, который отправляет изображение на сервер :
uploadImageService(url: string, param: any) {
const fd: FormData = new FormData();
const imgBlob = new Blob([param],{type: param.type});
fd.append('file', imgBlob);
return this.http
.post(url, fd, httpOptionsImages);
}
Это код на стороне сервера:
@RequestMapping(method = RequestMethod.POST, value = "/subir-imagen")
public ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException, SQLException {
LOGGER.log(Level.INFO, "/subir-imagen, handleFileUpload file.tostring {0}", file.toString());
String fileName = fileManagerService.storeFile(file);
String fileDownloadUri = ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/downloadFile/")
.path(fileName)
.toUriString()
return ResponseEntity.ok(fileDownloadUri);
}
public String storeFile(MultipartFile file) throws SQLException, IOException {
// Normalize file name
String fileName = StringUtils.cleanPath(file.getName());
try {
// Check if the file's name contains invalid characters
if (fileName.contains("..")) {
LOGGER.log(Level.INFO, "Sorry! Filename contains invalid path sequence {0}", fileName);
}
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
Path path = Paths.get(fileStoragePath + File.separator + fileName + "." + extension.toLowerCase());
Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
}
catch (IOException ex) {
LOGGER.log(Level.INFO, "Could not store file " + fileName + ". Please try again! {0}", ex);
}
return fileName;
}
Когда я делаю запрос на публикациючерез почтальон изображение сохраняется в правильном формате, и при загрузке изображение отображается правильно.
Когда я делаю запрос через приложение, изображение правильно сохраняется на сервере, но без расширения, я пытаюсь поставить формат вручную, но он не может быть отображен.
КогдаЯ запускаю на стороне сервера file.getContentType());
Я видел, что изображение, отправленное моим приложением, имеет тип application / octet-stream , а изображение, отправленное почтальоном, - image / jpg
Я пытался преобразовать приложение / октет-поток в изображение / JPG без успеха в Java.Также я пытался поставить Content-Type
заголовки к запросу, но у меня есть только некоторые ошибки ...
Я также пытался пропустить изображение непосредственно через форму, без BLOB-объектов, а также без BLOB-объектовили форма, и она все еще не работает.
Есть ли способ, когда вы копируете файл, вы передаете его в конкретную форму?или любой способ отформатировать это изображение с ионной камеры?
Спасибо!