高分求 一个struts 应用代码
大家帮忙写一个用做的struts 文件,图片 上传下载的代码.
最好是jsp页面 数据库设计 一起给出答案.
一定按时结帐!
------解决方案--------------------...struts的sample里面没有吗。。。
网上一打把啊
------解决方案--------------------页面:
<td width= "50% " rowspan= "2 ">
<span class= "InputAreaCell ">
<strong>
<bean:message key= "question.picture "/>
<br>
<html:file name= "questionActionForm " property= "file " onchange= "return load_img(this.value,img); "/>
<br>
<br>
<bean:message key= "question.preview "/>
<div id= "img "> </div>
<br>
</strong>
</span>
</td>
------解决方案--------------------功能设计:给用户提供一个上传的界面,并设定上传文件的尺寸上限。用户上传的照片先统一保存在一个临时文件夹中,之后可以用 <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];