Как остановить весенний gridFsTemplate между ними при хранении большого файла - PullRequest
0 голосов
/ 19 декабря 2018

Я использую Spring GridFsTemplate для хранения видеофайлов.Моя функция сохранения выглядит следующим образом:

public String save(String fileName, String contentType, InputStream inputStream, String userName){
        DBObject metaData = new BasicDBObject();
        metaData.put("user", userName);
        return gridFsTemplate.store(inputStream, fileName, contentType, metaData).toString();
    }

Вышеуказанный метод всегда вызывается в новом потоке.У меня есть требование, чтобы пользователь мог остановить загрузку видео между ними.Как я могу добиться этого с GridFsTemplate?

1 Ответ

0 голосов
/ 19 декабря 2018

GridFSBucket предоставляет метод потока загрузки, с помощью которого я могу контролировать часть загрузки.Ниже приведен код

public String saveViaOutputStream(String fileName, InputStream inputStream){
        try {
            GridFSUploadStream gridFSUploadStream = gridFSBucket.openUploadStream(fileName);
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(buffer))!= -1) {
                gridFSUploadStream.write(buffer, 0, len);
            }
            gridFSUploadStream.flush();
            gridFSUploadStream.close();

            return gridFSUploadStream.getObjectId().toString();
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }

. Я могу запустить его в потоке, а когда пользователь захочет остановить загрузку, я могу прервать этот поток.

...