Так как вы используете пружину. Вы можете использовать MultipartFile
, чтобы получить файл в вашем контроллере, а затем использовать Binary
из org.bson
, чтобы сохранить файл в MongoDB, если размер вашего изображения <16 МБ (если размер изображения> 16 МБ, вы можете использовать GridFs ).
Вам нужно добавить в проект только одну зависимость - spring-data-mongoDB
Давайте рассмотрим пример коллекции User, которая выглядит следующим образом:
@Document
public class User {
@Id
private String id;
private String name;
private Binary image;
// getters and setters
}
Здесь вы можете увидеть Binary image
, который представляет ваш файл изображения.
Теперь создайте репозиторий для этой коллекции пользователей, используя MongoRepository
public interface UserRepository extends MongoRepository<User, String>{
}
Создайте контроллер для демонстрационной цели. Используйте @RequestParam MultipartFile file
, чтобы получить файл на свой контроллер, получить байты из файла и установить его для объекта пользователя. user.setImage(new Binary(file.getBytes()));
Полный пример приведен ниже:
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping("/users")
User createUser(@RequestParam String name, @RequestParam MultipartFile file) throws IOException {
User user = new User();
user.setName(name);
user.setImage(new Binary(file.getBytes()));
return userRepository.save(user);
}
@GetMapping("/users")
String getImage(@RequestParam String id) {
Optional<User> user = userRepository.findById(id);
Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(user.get().getImage().getData());
}
}
Запустите сервер и достигните конечной точки, как показано нижескриншот почтальона
Ваши данные хранятся в формате mongoDb в формате BinData
и для получения данных из базы данных, пожалуйста, используйте метод getImage
вышеcode.
EDIT:
Задавающий вопрос использует библиотеку tess4j
для извлечения текста из изображения, а doOCR
- метод в этой библиотеке. Я выполнил следующие шаги для извлечения текста из изображения в моем приложении для весенней загрузки.
Установите tesseract-ocr
в вашей системе:
sudo apt-get install tesseract-ocr
Загрузите eng.traineddata
обучающие данные из https://github.com/tesseract-ocr/tessdata и переместите их в корневую папку проекта.
Добавьте приведенную ниже зависимость к вашему проекту:
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.2.1</version>
</dependency>
Добавьте следующий код в существующий проект:
@GetMapping("/image-text")
String getImageText(@RequestParam String id) {
Optional<User> user = userRepository.findById(id);
ITesseract instance = new Tesseract();
try {
ByteArrayInputStream bais = new ByteArrayInputStream(user.get().getImage().getData());
BufferedImage bufferImg = ImageIO.read(bais);
String imgText = instance.doOCR(bufferImg);
return imgText;
} catch (Exception e) {
return "Error while reading image";
}
}