Я хочу использовать компонент загрузки vaadin в своем веб-приложении и напрямую загружать файлы в mongo db в формате gridfs.Vaadin Загрузить компонент - напрямую загрузить в репозиторий mongo
В моей текущей реализации используется временное хранилище, чтобы сначала загрузить файл, а затем сохранить в mongo преобразование в gridfs.
вот мой код компонента загрузки: У меня есть реализовать метод интерфейса приемника recieveUpload
private File file;
private String tempFilePath;
public class HandleUploadImpl extends CustomComponent
implements Upload.SucceededListener,
Upload.FailedListener,
Upload.ProgressListener,
Upload.Receiver { ........
public OutputStream receiveUpload(String filename, String MIMEType) {
logger.debug("File information {} {}", filename, MIMEType);
this.filename = filename;
FileOutputStream fos;
file = new File(tempFilePath + filename);
try {
fos = new FileOutputStream(file);
} catch (final java.io.FileNotFoundException e) {
logger.error("Error occurred while opening the file {}", e);
return null;
}
return fos;
}
Вот мой код для хранения в хранилище Монго
private void saveBuildFile(Map<String, Object> buildFileInfo, String key) {
if (buildFileInfo.containsKey(key)) {
GridFS gridFS = new GridFS(mongoTemplate.getDb(), COLLECTION_NAME);
File file = (File) buildFileInfo.get(key);
buildFileInfo.remove(key);
try {
GridFSInputFile savedFile = gridFS.createFile(file);
savedFile.put(idK, buildFileInfo.get(key + "-id"));
savedFile.save();
} catch (Exception e) {
logger.error("Something went wrong when saving the file in the db {}", e);
}
}
}
Есть ли способ, я могу опустить использование временного хранилища и установить выходной поток компонента загрузки в файл gridfs репозитория mongo.
Почему вы не можете использовать код в _saveBuildFile_ и сделать это в методе receiveUpload? Функция receiveUpload просто должна возвращать OutputStream над файлом, в котором он будет писать. Думаю, вам удастся это сделать. – sergiofbsilva