春を使っているので。 MultipartFile
を使用できます コントローラでファイルを取得してから、Binary
を使用します org.bson
の ファイルをMongoDBに保存するには、画像サイズが16 MB未満の場合(画像サイズが16 MBを超える場合は、 GridFs
。
プロジェクトに追加する必要がある依存関係は、spring-data-mongoDB
の1つだけです。
次のようなユーザーコレクションの例を見てみましょう。
@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());
}
}
以下のpostmanスクリーンショットに示すように、サーバーを起動してエンドポイントに到達します
データはmongoDbのBinData
に保存されます フォーマットしてデータベースからデータを取得するには、getImage
を参照してください。 上記のコードの方法。
編集:
質問者はtess4j
を使用しています 画像とdoOCR
からテキストを抽出するためのライブラリ このライブラリのメソッドです。これらの手順に従って、SpringBootアプリケーションの画像からテキストを抽出しました。
-
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";
}
}