`
缠小溪
  • 浏览: 24051 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

基于struts的文件上传

 
阅读更多

基于struts的文件上传的核心还是java文件输出输出处理。文件通过表单提交,struts中的action对上传的文件进行处理,其实跟一般表单数据的处理是一样的。

一、form表单控件设置

 

    <form action="/FileUpandDown/register.do" enctype="multipart/form-data" method="post">
    	文件:<input type="file" name="myphoto"/>
    	<input type="submit" value="注册"/>
    </form>


这里要主要form的属性enctype的值不是默认的application/x-www-form-urlencoded而是enctype="multipart/form-data"

 

二、struts中表单的配置

 

public class UserForm extends ActionForm {
	private String username;//用户名称
	private FormFile myphoto;//上传文件
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public FormFile getMyphoto() {
		return myphoto;
	}
	public void setMyphoto(FormFile myphoto) {
		this.myphoto = myphoto;
	}
}


注意import org.apache.struts.upload.FormFile类,struts中有响应的文件上传类型

 

三、action请求处理

 

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		UserForm userForm = (UserForm) form;
		// TODO Auto-generated method stub
		String name=userForm.getUsername();
		FormFile formFile=userForm.getMyphoto();
		//获取上传文件名
		String filename=formFile.getFileName();
		//获取上传文件的大小
		int filesize=formFile.getFileSize();
		//定义输入流
		InputStream is=null;
		//定义输出流
		OutputStream os=null;
		try {
			//获取输入流
			is=formFile.getInputStream();
			//得到upload文件夹服务器端的绝对路径
			String uploadPath=this.getServlet().getServletContext().getRealPath("/upload");
			//写入相应文件夹并重命名文件
			os=new FileOutputStream(uploadPath+"\\"+MyTools.getNewFileName(filename));
			//读取文件并写出到服务器的upload文件夹中
			int len=0;
			//缓存,防止上传文件过大
			byte[] bytes=new byte[1024];
			//循环处理
			while((len=is.read(bytes))>0){
				//读一点,写一点
				os.write(bytes,0,len);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				//关闭流
				is.close();
				os.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}
}


这里对于上传文件进行了如下操作:

 

1、获取上传文件的基本信息。struts表单的formfile类提供了相关的方法。如获取文件名,文件大小等

2、通过输入流读取文件,通过输出流写入文件。

3、获取本地文件夹的绝对路径,重命名上传文件,防止因文件名重复而导致覆盖源文件。

4、解决中文文件名的乱码问题(通过过滤器可以解决)。

5、java中UUID通用唯一识别码的使用

文件上传要注意的问题:

1、上传文件类型控制

2、上传文件大小控制

3、上传文件目录控制

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics