struts+MySQL实现图片的存储与显示

[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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值