当我上传文件时,我将输入流传递给工作簿。现在我想在另一个方法中使用工作簿中的InputStream
,例如将文件InputStream
保存到DB中的保存。这是我的代码。
public void FileUpload(FileUploadEvent event) throws ParseException {
UploadedFile item = event.getUploadedFile();
Workbook workbook = org.apache.poi.ss.usermodel.WorkbookFactory.create(item.getInputStream());
}
现在我想将Workbook对象作为实例变量并传递给另一个方法,如下所示。
public String save() throws SQLException, IOException{
fileId = dao.savefile(workbook,fileName);
}
在我的savefile方法
中InputStream inptest= **workbook.getStream**
ps.setBinaryStream(2,fin,fin.available());
所以inptest
变量接受InputStream
,我想从工作簿中获取它。
答案 0 :(得分:4)
听起来你要求的是一种将InputStream用于多种用途的方法:
由于从InputStream读取通常是一次性操作,无法重复,因此您可以执行以下操作:
代码可能如下所示:
public void FileUpload(FileUploadEvent event) throws ParseException {
UploadedFile item = event.getUploadedFile();
InputStream originalInputStream = item.getInputStream();
byte[] buffer = IOUtils.toByteArray(originalInputStream);
InputStream is1 = new ByteArrayInputStream(buffer);
InputStream is2 = new ByteArrayInputStream(buffer);
Workbook workbook = org.apache.poi.ss.usermodel.WorkbookFactory.create(is1);
}
InputStream inptest = is2;
ps.setBinaryStream(2,fin,fin.available());
注意:这对IOUtils使用Apache Commons IO library。
答案 1 :(得分:1)
如果您尝试将Workbook对象保存到文件,则有一个方法write()接收OutputStream。然后可以通过
保存到文件FileOutputStream fos = new FileOutputStream("path/to/file/[filename]");
workbook.write(fos);
fos.close();