日期:2014-05-16  浏览次数:20315 次

jsp实现文件的上传及javascript对上传文件的简单验证

  前两天做OJ的时候,我做的两个功能都涉及到了文件的上传这个功能,所以我觉得很有必要把这个模块的代码记录下来,框架使用的struts2
  首先,jsp页面中的的form表单是这样的


<form  method="post" enctype="multipart/form-data" name="form2">
  	<table>
	  <tr>
	  <td>上传</td>
	  <td><input type="file" name="file"/>(仅支持.zip格式的压缩文件)</td>
	  </tr>
  	</table>
	 input type="submit" value=" 提交 " onclick="test()"/>
  </form>


其中form表单中的action方法我设置中了javascript代码中,用于对上传文件的验证
<script type="text/javascript">
		function test()
		{
			if(form.file.value == "")
			{
				alert("请选择文件!");//确定文件框不为空
			}
			else
			{  
				var path = form.file.value;
				var name = ".zip";
				var c = path.indexOf(name,path.length-4); 
/*
验证文件的格式是否为.zip方法为检查文件路径的最后四个字符是否为.zip,是的话返回一个大于0的数字(即它们在整个字符串中的位置,如果没有的话则返回-1)
*/
				if(c>=0)
				{
					form.action="contest/shengcheng.action"; //设置form表单的action
				}
				else
				{
					alert("文件格式不正确!");
				}
			}
		}
</script>

  要正确地把文件传到服务器上,action中的代码为
         private File file;  
	private String fileFileName; //文件名,只是文件名没有路径
	
	
	
	public File getFile() { 
		return file;
	}
	public void setFile(File file) {
		this.file = file;
	}
	public String getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}
	public String upload() throws Exception
	{
                  String root = ServletActionContext.getRequest().getRealPath("/upload");//上传的文件在服务器上保存的路径


		File filepath = new File(root);
		if(!filepath.exists())
			filepath.mkdirs(); //判断/tmp目录是否存在,若不存在,创建
		
		InputStream is = new FileInputStream(file);
		
		File destFile = new File(filepath,fileFileName);
		
		OutputStream os = new FileOutputStream(destFile);
		
		byte[] buffer = new byte[400];
		
		int length = 0;
		while(-1 != (length = is.read(buffer)))
		{
			os.write(buffer,0,length);
		}
		
		is.close();
		os.close();
		
		return "success";
	}