Невозможно записать на диск с помощью GridFSFile в Springboot 2.0.2 - PullRequest
0 голосов
/ 02 июня 2018

Попытка использовать код в:

http://javasampleapproach.com/spring-framework/spring-data/springdata-mongodb-gridfstemplate-save-retrieve-delete-binary-files-image-text-files

со Springboot 1.5.13.В этом коде для получения изображения используйте GridFSDBFile следующим образом:

GridFSDBFile imageFile = gridOperations.findOne(new Query(Criteria.where("_id").is(imageFileId)));

и позже для сохранения в файловой системе используйте это:

imageFile.writeTo

Baeldung имеет тот же код: http://www.baeldung.com/spring-data-mongodb-gridfs

У меня есть проект в Springboot 2.0.2, и эта строка:

GridFSDBFile imageFile = gridOperations.findOne(new Query(Criteria.where("_id").is(imageFileId)));

выдает ошибку:

Type mismatch: cannot convert from GridFSFile to GridFSDBFile

, поэтому, когда я изменился на:

GridFSFile imageFile = gridOperations.findOne(new Query(Criteria.where("_id").is(imageFileId)));

без ошибок, но сейчас у меня нет доступного метода:

writeTo

для записи на диск.

ОБНОВЛЕНИЕ 1:

imageFileId = "5b0bff8b7cc45b32f43b47f4";

        GridFSFile imageFile = gridOperations.findOne(new Query(Criteria.where("_id").is(imageFileId)));
try {
            File file = new File("c:/JSA/retrieve/" + imageFile.getFilename());
            FileOutputStream streamToDownloadTo = new FileOutputStream(file);
            //This line doesn't works
            gridFSBucket.downloadToStream(imageFile.getId(), streamToDownloadTo);
            streamToDownloadTo.close();
        } catch (IOException e) {
            // handle exception
            System.out.println("error: " + e.getMessage());
        } catch (Exception e1) {
            System.out.println("error1: " + e1.getMessage());
        }

ОБНОВЛЕНИЕ 2:

try {
            File file = new File("c:/JSA/retrieve/" + imageFile.getFilename());
            FileOutputStream streamToDownloadTo = new FileOutputStream(file);
            System.out.println("imageFile.getId(): " + imageFile.getId());
            System.out.println("streamToDownloadTo: " + streamToDownloadTo.toString());
            gridFSBucket.downloadToStream(imageFile.getId(), streamToDownloadTo);
            streamToDownloadTo.close();
        } catch (IOException e) {
            // handle exception
            System.out.println("error: " + e.getMessage());
        } catch (Exception e1) {
            System.out.println("error1: " + e1.getMessage());
        }

Консоль

imageFile.getId(): BsonObjectId{value=5b0bff8b7cc45b32f43b47f4}
streamToDownloadTo: java.io.FileOutputStream@3b20c8e2

Эта строка выдает исключение:

gridFSBucket.downloadToStream(imageFile.getId(), streamToDownloadTo);

и возвращает ноль


Решено

Впрыск:

 @Autowired
    MongoGridFsTemplate mongoGridFsTemplate;


GridFSBucket gridFSBucket = GridFSBuckets.create(mongoGridFsTemplate.mongoDbFactory().getDb());
imageFileId = "5b0bff8b7cc45b32f43b47f4";

GridFSFile imageFile = gridOperations.findOne(new Query(Criteria.where("_id").is(new ObjectId(imageFileId))));

            try {
                File file = new File("c:/JSA/retrieve/" + imageFile.getFilename());
                FileOutputStream streamToDownloadTo = new FileOutputStream(file);
                gridFSBucket.downloadToStream(imageFile.getId(), streamToDownloadTo);
                streamToDownloadTo.close();
            } catch (IOException e) {
                // handle exception
                System.out.println("error: " + e.getMessage());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...