gpt4 book ai didi

java - Vaadin上传组件——直接上传到mongo仓库

转载 作者:可可西里 更新时间:2023-11-01 09:53:04 26 4
gpt4 key购买 nike

我想在我的网络应用程序中使用 vaadin 上传组件,并以 gridfs 格式直接将文件上传到 mongo db。

我当前的实现使用一个临时存储位置来首先上传文件,然后存储在 mongo 中转换为 gridfs。

这是我的上传组件代码:我已经实现了 Receiver 接口(interface)方法 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;
}

这是我要存储在 mongo 存储库中的代码

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);
}
}
}

有没有办法可以省略临时存储的使用并将上传组件的输出流设置为mongo存储库gridfs文件。

最佳答案

这对我有用:

package ch.domain.vaadin;

import ch.domain.vaadin.mongo.MongoItem;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSInputFile;
import com.vaadin.data.fieldgroup.FieldGroup;
import com.vaadin.ui.Upload.Receiver;
import com.vaadin.ui.Upload.SucceededEvent;
import com.vaadin.ui.Upload.SucceededListener;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;

/**
*
* @author eric
*/
class ImageUploader implements Receiver, SucceededListener {
private String filename;
private DB db;
private ByteArrayOutputStream fos;
private FieldGroup fieldGroup;


public void setFieldGroup(FieldGroup fieldGroup) {
this.fieldGroup = fieldGroup;
}


public ImageUploader(DB db)
{
this.db = db;
}

public OutputStream receiveUpload(String filename,
String mimeType) {
// Create upload stream
this.fos = new ByteArrayOutputStream();
this.filename = filename;

return this.fos; // Return the output stream to write to
}

public void uploadSucceeded(SucceededEvent event) {
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(this.fos.toByteArray());
MongoItem parentId = (MongoItem) fieldGroup.getItemDataSource();
gfsFile.setMetaData(new BasicDBObject().append("parentId", parentId.getItemProperty("_id").getValue().toString()));
gfsFile.setFilename(this.filename);
gfsFile.save();
this.fos = null;
gfsFile = null;
// Show the uploaded file in the image viewer
// image.setVisible(true);
// image.setSource(new FileResource(file));
}
}

关于java - Vaadin上传组件——直接上传到mongo仓库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10910848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com