我想在 Struts 2 应用程序的数据库中插入图像;
我正在使用三个类:
- 模型类
- DAO 类使用准备好的语句插入查询。
- 动作类
在 JSP 中,我使用的是<s:file>
tag 。
我的问题是:我需要使用什么类型的模型类私有变量?
在数据库中我使用BLOB
类型来存储图像,对吗?如果没有请给我建议。
如何使用 Srtuts 2 在数据库中插入图像?
我想在 Struts 2 应用程序的数据库中插入图像;
我正在使用三个类:
在 JSP 中,我使用的是<s:file>
tag 。
我的问题是:我需要使用什么类型的模型类私有变量?
在数据库中我使用BLOB
类型来存储图像,对吗?如果没有请给我建议。
如何使用 Srtuts 2 在数据库中插入图像?
为了将文件上传到 Struts 2,您已经在使用 Struts 2 FileUpload Interceptor 并且您只需要在您的操作或模型类中定义这些字段
public class UploadAction extends ActionSupport {
private File file;
private String contentType;
private String filename;
public void setUpload(File file) {
this.file = file;
}
public void setUploadContentType(String contentType) {
this.contentType = contentType;
}
public void setUploadFileName(String filename) {
this.filename = filename;
}
public String execute() {
//...
return SUCCESS;
}
}
您可以通过类似的方式将File
数据转换为byteArray
IOUtils.toByteArray(InputStream input);
并可以Blob
通过类似的方式将其保存为数据库中
Blob blob = connection.createBlob();
blob.setBytes(1, bytes);
使用fileUpload
拦截器File
,当您提交包含<s:file>
能够传输到服务器的标签和值数据的表单时,您可以将对象放入您的操作中。如果您的上传成功,那么您可以从本地存储读取服务器上的数据,java.io.tempdir
即可用于设置本地存储的位置。然后你需要读取文件的内容
File file; //this is uploaded file
FileInputStream is = new FileInputStream(file);
byte[] data = new byte[is.available()];
is.read(data);
is.close();
然后你可以使用java.sql.Blob
or java.sql.Clob
type 写入数据保存在数据库中,类型应该对应于数据库字段类型,即BLOB代表blob,CLOB代表clob等。当你再次从db中检索数据时,相同的java sql类型将用于将数据转换回来。
现在您的问题是,如果您想将该值保留在要使用数据库数据填充的模型中,有两个选项:
java.sql.Blob
byte[]
对于第二个选择,您需要byte[] data = getBytes(File file)
打开一个流并从文件中读取数据,或者如果您已经Blob
使用blob.getBytes(pos, length)
.
在您处理流的第一个选择中,使用Blob
ssetBinaryStream(pos)
获取输出流以写入上传的文件数据,或getBinaryStream()
从数据库中检索数据。
在大多数情况下,您应该使用第二个选择,直到您有足够的理由使用第一个。
使用 JDBC API 将Blob存储到数据库的示例,您可以找到添加和检索 BLOB 对象。