日期:2014-05-18  浏览次数:20624 次

高分求 一个struts 应用代码


   大家帮忙写一个用做的struts   文件,图片 上传下载的代码.

最好是jsp页面 数据库设计 一起给出答案.   

  一定按时结帐!

------解决方案--------------------
...struts的sample里面没有吗。。。
网上一打把啊
------解决方案--------------------
页面:

<td width= "50% " rowspan= "2 "> &nbsp;
<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];