如何从 java 中的 Workbook 对象获取 inputStream
how to get the inputStream from Workbook object in java
当我上传文件时,我将输入流传递到工作簿。现在我想在另一种方法中使用工作簿中的这个 InputStream
,比如保存我将文件 InputStream
保存到数据库的地方。这是我的代码。
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);
}
在我的存档方法中
InputStream inptest= **workbook.getStream**
ps.setBinaryStream(2,fin,fin.available());
所以 inptest
变量接受 InputStream
我想从工作簿中获取它。
如果您尝试将 Workbook 对象保存到文件中,可以使用一种方法 write(),它接受 OutputStream。然后可以通过
完成保存到文件
FileOutputStream fos = new FileOutputStream("path/to/file/[filename]");
workbook.write(fos);
fos.close();
听起来您要求的是一种将 InputStream 用于多种用途的方法:
- 创建工作簿对象(您已经在做)
- 将该 InputStream 的内容保存到其他地方
由于从InputStream中读取通常是一次性的操作,不能重复,那么你可以这样做:
- 将 InputStream 的全部内容保存到缓冲区。
- 从缓冲区中打开两个新的 InputStreams。
- 将您的 InputStreams 传递给您的两个方法。
代码可能如下所示:
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());
注意:这使用 Apache Commons IO library 作为 IOUtils。
当我上传文件时,我将输入流传递到工作簿。现在我想在另一种方法中使用工作簿中的这个 InputStream
,比如保存我将文件 InputStream
保存到数据库的地方。这是我的代码。
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);
}
在我的存档方法中
InputStream inptest= **workbook.getStream**
ps.setBinaryStream(2,fin,fin.available());
所以 inptest
变量接受 InputStream
我想从工作簿中获取它。
如果您尝试将 Workbook 对象保存到文件中,可以使用一种方法 write(),它接受 OutputStream。然后可以通过
完成保存到文件FileOutputStream fos = new FileOutputStream("path/to/file/[filename]");
workbook.write(fos);
fos.close();
听起来您要求的是一种将 InputStream 用于多种用途的方法:
- 创建工作簿对象(您已经在做)
- 将该 InputStream 的内容保存到其他地方
由于从InputStream中读取通常是一次性的操作,不能重复,那么你可以这样做:
- 将 InputStream 的全部内容保存到缓冲区。
- 从缓冲区中打开两个新的 InputStreams。
- 将您的 InputStreams 传递给您的两个方法。
代码可能如下所示:
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());
注意:这使用 Apache Commons IO library 作为 IOUtils。