将我的文件转换为 blob 然后插入到数据库
converting my files to blob then inserting to database
我在通过操作 class..
插入上传的文件时遇到问题
我在操作中使用此代码class
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
/* Upload NBI */
File nbi = null;
File nbiFile = getThisFile(uploadRequest, "nbiFile", nbi);
正在调用此方法获取文件
public File getThisFile(UploadPortletRequest uploadRequest, String filename, File file){
InputStream[] inputStream;
try {
inputStream = uploadRequest.getFilesAsStream(filename);
for(InputStream fileObj:inputStream){
file = FileUtil.createTempFile(fileObj);
}
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
然后这会将文件转换为 blob,我认为..
/* Convert files to blob */
Blob blobNbi = Blob.class.cast(nbiFile);
那我应该可以存起来了
/* Attachment Object Properties */
long attachment_id = CounterLocalServiceUtil.increment();
attachments a = null;
a = attachmentsLocalServiceUtil.createattachments((int) attachment_id);
a.setNbi_clearance(blobNbi);
/* Save the data to table */
a = attachmentsLocalServiceUtil.addattachments(a);
但是当我 运行 它时我得到 ClassCastException: cannot cast java.io.File to java.sql.Blob...
我的转换有什么问题,我试图找到从文件到 blob 的直接转换,但对我来说没有任何效果,也许我需要先转换成其他东西,然后再转换成 blob??
请帮忙,谢谢大家
我认为演员表行不通。 Blob 由字节组成,因此您需要将文件内容读入 byte[] 并使用 java.sql.Blob.setBytes(long, byte[])
-Blob 的方法。由于它是一个接口,如果您真的需要一个 Blob 对象,Class javax.sql.rowset.serial.SerialBlob 可能会对您有所帮助。
如果使用 PreparedStatement,则可以使用 java.sql.PreparedStatement.setBlob(int, InputStream)
而无需先创建 byte[]。
如果你使用 JPA/Hibernate afaik,它应该能够使用 byte[].
因为我正在使用 Liferay 将我的文件插入到数据库中。我使用了以下代码,看来 Liferay 已经创建了一个名为 'OutputBlob' 的对象来处理 blob 对象。这是代码
/* Get file from jsp */
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
File file = uploadRequest.getFile("XXX", true); // XXX is the input name from my jsp
FileInputStream fileInput = new FileInputSream(file);
OutputBlob blobOutput = new OutputBlob(fileInput, file.length());
/* Attachment Object Properties */
long attachment_id = CounterLocalServiceUtil.increment();
attachments a = null;
a = attachmentsLocalServiceUtil.createattachments((int) attachment_id);
a.setNbi_clearance(blobOutput);
/* Save the data to table */
a = attachmentsLocalServiceUtil.addattachments(a);
这就是解决我的问题的方法,请记住它只适用于 liferay 上传,OutputBlob 对象不是在 Liferay 以外的任何其他 platform/language/framework 上创建的...感谢您的帮助,
我希望有 liferay 上传问题的人看到这个 :D
我在通过操作 class..
插入上传的文件时遇到问题我在操作中使用此代码class
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
/* Upload NBI */
File nbi = null;
File nbiFile = getThisFile(uploadRequest, "nbiFile", nbi);
正在调用此方法获取文件
public File getThisFile(UploadPortletRequest uploadRequest, String filename, File file){
InputStream[] inputStream;
try {
inputStream = uploadRequest.getFilesAsStream(filename);
for(InputStream fileObj:inputStream){
file = FileUtil.createTempFile(fileObj);
}
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
然后这会将文件转换为 blob,我认为..
/* Convert files to blob */
Blob blobNbi = Blob.class.cast(nbiFile);
那我应该可以存起来了
/* Attachment Object Properties */
long attachment_id = CounterLocalServiceUtil.increment();
attachments a = null;
a = attachmentsLocalServiceUtil.createattachments((int) attachment_id);
a.setNbi_clearance(blobNbi);
/* Save the data to table */
a = attachmentsLocalServiceUtil.addattachments(a);
但是当我 运行 它时我得到 ClassCastException: cannot cast java.io.File to java.sql.Blob...
我的转换有什么问题,我试图找到从文件到 blob 的直接转换,但对我来说没有任何效果,也许我需要先转换成其他东西,然后再转换成 blob??
请帮忙,谢谢大家
我认为演员表行不通。 Blob 由字节组成,因此您需要将文件内容读入 byte[] 并使用 java.sql.Blob.setBytes(long, byte[])
-Blob 的方法。由于它是一个接口,如果您真的需要一个 Blob 对象,Class javax.sql.rowset.serial.SerialBlob 可能会对您有所帮助。
如果使用 PreparedStatement,则可以使用 java.sql.PreparedStatement.setBlob(int, InputStream)
而无需先创建 byte[]。
如果你使用 JPA/Hibernate afaik,它应该能够使用 byte[].
因为我正在使用 Liferay 将我的文件插入到数据库中。我使用了以下代码,看来 Liferay 已经创建了一个名为 'OutputBlob' 的对象来处理 blob 对象。这是代码
/* Get file from jsp */
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
File file = uploadRequest.getFile("XXX", true); // XXX is the input name from my jsp
FileInputStream fileInput = new FileInputSream(file);
OutputBlob blobOutput = new OutputBlob(fileInput, file.length());
/* Attachment Object Properties */
long attachment_id = CounterLocalServiceUtil.increment();
attachments a = null;
a = attachmentsLocalServiceUtil.createattachments((int) attachment_id);
a.setNbi_clearance(blobOutput);
/* Save the data to table */
a = attachmentsLocalServiceUtil.addattachments(a);
这就是解决我的问题的方法,请记住它只适用于 liferay 上传,OutputBlob 对象不是在 Liferay 以外的任何其他 platform/language/framework 上创建的...感谢您的帮助, 我希望有 liferay 上传问题的人看到这个 :D