您正在构建一个动态Web项目,其中欢迎页面有struts2文件标签现在我想将该指定文件存储到mysql数据库中,有人会帮助我...
提前致谢。
这是我开发的代码,但它采用文件参数静态意味着我手动指定路径。但它应该从struts 2文件标签中获取路径,看看java类你会得到它..
public class FileUploadACtion
{
public String execute() throws IOException
{
System.out.println("Hibernate save image into database");
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
//save image into database
File file = new File("C:\\mavan-hibernate-image-mysql.gif");
byte[] bFile = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
//convert file into array of bytes
fileInputStream.read(bFile);
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
FileUpload tfile = new FileUpload();
avatar.setImage(bFile);
session.save(tfile);
//Get image from database
FileUpload tfile2 = (FileUpload)session.get(FileUpload.class,FileUpload.getAvatarId());
byte[] bAvatar = avatar2.getImage();
try{
FileOutputStream fos = new FileOutputStream("C:\\test.gif");
fos.write(bAvatar);
fos.close();
}catch(Exception e){
e.printStackTrace();
}
session.getTransaction().commit();
}
}
答案 0 :(得分:0)
您应该将图像作为BLOB类型存储在表中。假设您有一个Person
类,其中image
个人存储在数据库中。如果您想要映射它,只需在保存图像的人POJO中添加一个属性。
@Column(name="image")
@Blob
private Blob image;
当您显示它时,将其转换为byte[]
并显示。
private byte[] toByteArray(Blob fromImageBlob) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
return toByteArrayImpl(fromImageBlob, baos);
} catch (Exception e) {
}
return null;
}
private byte[] toByteArrayImpl(Blob fromImageBlob,
ByteArrayOutputStream baos) throws SQLException, IOException {
byte buf[] = new byte[4000];
int dataSize;
InputStream is = fromImageBlob.getBinaryStream();
try {
while((dataSize = is.read(buf)) != -1) {
baos.write(buf, 0, dataSize);
}
} finally {
if(is != null) {
is.close();
}
}
return baos.toByteArray();
}
您可以查看以下示例以了解有关它的更多信息。
答案 1 :(得分:0)
嗯,你不需要手动执行此操作,当你使用Struts2上传文件时,它在文件up-loader拦截器中的构建将为你做主要的提升。 您只需要在操作类中指定一些属性,这样Framework就会在您的操作类中注入require数据,您可以执行其他工作。
这是你必须做的。在JSP页面中你需要使用<s:file>
标签
<s:form action="doUpload" method="post" enctype="multipart/form-data">
<s:file name="upload" label="File"/>
<s:submit/>
</s:form>
fileUpload拦截器将使用setter注入将上传的文件和相关数据插入到Action类中。对于名为upload的表单字段,您将提供以下示例中显示的三个setter方法: 在你的动作课中,这就是你所要做的一切
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;
}
}
上传的文件将被视为临时文件,具有较长的随机文件名,您必须在操作类execute()方法中复制它。您可以获取FileUtils的帮助。
我建议您阅读Struts2的官方文件上传文档,了解完整配置Struts2 File-upload