[color=green][size=18]
struts上传与显示图片例子参考(二)2007年05月01日 星期二 上午 11:49例五:struts+MySQL实现图片的存储与显示
人事信息管理系统中,需要管理用户的个人身份照片。通常这种格式的照片只有几K到几十K大小,保存在数据库中易于进行管理和维护(如果放在文件夹下容易发生误操作而引起数据被修改或丢失)。
功能设计:给用户提供一个上传的界面,并设定上传文件的尺寸上限。用户上传的照片先统一保存在一个临时文件夹中,之后可以用<img>指向临时文件夹中的这个图片,让用户可以预览自己上传的照片。当所有的用户信息都收集完成后,将图片和其他信息一并提交,保存到数据库中。保存成功以后,删除临时文件夹中的图片。
实现步骤:
我使用的是从struts主页上下载的struts-1.2.8-src,其中web/examples/目录下有一个upload的例子,稍微修改了一下就直接拿过来用了。这是一个JSP页面、ActionForm和Action的组合。下面分别列出各自的代码。
upload.jsp的部分源代码:
<html:form action="/UploadSubmit" enctype="multipart/form-data">
请选择需要上传的照片:
<html:file property="theFile"/>
<html:submit value="上传"/>
</html:form>
接下来需要在ActionForm中声明这个属性,并设置getter和setter方法,这部分源代码如下:
public class UploadForm extends ActionForm {
protected FormFile theFile;
public FormFile getTheFile() {
return theFile;
}
public void setTheFile(FormFile theFile) {
this.theFile = theFile;
}
}
这个表单的theFile属性不是String或boolean,而是org.apache.struts.upload.FormFile。因为用户上传的是一个二进制文件,而HTTP协议是以文本形式传输数据的,这就需要进行转换。打个比方,一辆汽车需要从甲地送到乙地,但是两地之间只有一条索道,汽车没法开,所以就想个办法在甲地把汽车先拆了,把零件送到乙地再重新组装成一辆汽车。FormFile起的就是拆卸和组装的作用,只不过它把拆卸、传输和组装的过程都封装起来了,我们看到的是一辆汽车从甲地开进FormFile,过一会它就从乙地开出来了J我们要决定的只是把它停到什么地方,这就是Action的活了。
按照功能设计,Action要把这部车停到一个临时文件夹下面,这部分源代码如下:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
if (form instanceof UploadForm) {
UploadForm theForm = (UploadForm) form;
//获取上传的数据文件
FormFile file = theForm.getTheFile();
//获取文件名
String filename= file.getFileName();
//设置图片文件临时存放的路径
HttpSession session = request.getSession();
String path = session.getServletContext().getRealPath("/") + "temp\\" + filename;
try {
//读取文件中的数据,获取二进制的数据流
InputStream stream = file.getInputStream();
// 把数据写到指定路径
OutputStream bos = new FileOutputStream(path);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
logger.info("The file has been written to \""
+ path + "\"");
//设计一个标记,说明用户已经上传过照片了。
session.setAttribute("imageuploaded","true");
session.setAttribute("filename",filename);
// close the stream
stream.close();
bos.flush();
bos.close();
}catch (FileNotFoundException fnfe) {
return null;
}catch (IOException ioe) {
[/color][/size]
struts上传与显示图片例子参考(二)2007年05月01日 星期二 上午 11:49例五:struts+MySQL实现图片的存储与显示
人事信息管理系统中,需要管理用户的个人身份照片。通常这种格式的照片只有几K到几十K大小,保存在数据库中易于进行管理和维护(如果放在文件夹下容易发生误操作而引起数据被修改或丢失)。
功能设计:给用户提供一个上传的界面,并设定上传文件的尺寸上限。用户上传的照片先统一保存在一个临时文件夹中,之后可以用<img>指向临时文件夹中的这个图片,让用户可以预览自己上传的照片。当所有的用户信息都收集完成后,将图片和其他信息一并提交,保存到数据库中。保存成功以后,删除临时文件夹中的图片。
实现步骤:
我使用的是从struts主页上下载的struts-1.2.8-src,其中web/examples/目录下有一个upload的例子,稍微修改了一下就直接拿过来用了。这是一个JSP页面、ActionForm和Action的组合。下面分别列出各自的代码。
upload.jsp的部分源代码:
<html:form action="/UploadSubmit" enctype="multipart/form-data">
请选择需要上传的照片:
<html:file property="theFile"/>
<html:submit value="上传"/>
</html:form>
接下来需要在ActionForm中声明这个属性,并设置getter和setter方法,这部分源代码如下:
public class UploadForm extends ActionForm {
protected FormFile theFile;
public FormFile getTheFile() {
return theFile;
}
public void setTheFile(FormFile theFile) {
this.theFile = theFile;
}
}
这个表单的theFile属性不是String或boolean,而是org.apache.struts.upload.FormFile。因为用户上传的是一个二进制文件,而HTTP协议是以文本形式传输数据的,这就需要进行转换。打个比方,一辆汽车需要从甲地送到乙地,但是两地之间只有一条索道,汽车没法开,所以就想个办法在甲地把汽车先拆了,把零件送到乙地再重新组装成一辆汽车。FormFile起的就是拆卸和组装的作用,只不过它把拆卸、传输和组装的过程都封装起来了,我们看到的是一辆汽车从甲地开进FormFile,过一会它就从乙地开出来了J我们要决定的只是把它停到什么地方,这就是Action的活了。
按照功能设计,Action要把这部车停到一个临时文件夹下面,这部分源代码如下:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
if (form instanceof UploadForm) {
UploadForm theForm = (UploadForm) form;
//获取上传的数据文件
FormFile file = theForm.getTheFile();
//获取文件名
String filename= file.getFileName();
//设置图片文件临时存放的路径
HttpSession session = request.getSession();
String path = session.getServletContext().getRealPath("/") + "temp\\" + filename;
try {
//读取文件中的数据,获取二进制的数据流
InputStream stream = file.getInputStream();
// 把数据写到指定路径
OutputStream bos = new FileOutputStream(path);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
logger.info("The file has been written to \""
+ path + "\"");
//设计一个标记,说明用户已经上传过照片了。
session.setAttribute("imageuploaded","true");
session.setAttribute("filename",filename);
// close the stream
stream.close();
bos.flush();
bos.close();
}catch (FileNotFoundException fnfe) {
return null;
}catch (IOException ioe) {
[/color][/size]