`
ww1224
  • 浏览: 28030 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用webwork实现的图片上传==文件上传

阅读更多
说真的,做开发快两年了。自己感觉自己并没有多大的进步。心里很遗憾,虽然每次领导安排的任务也几乎都能完成。但是自我感觉质量部是很高。
  近期发现身边的牛人同事们个个都有在维护自己的博客。每当完成一件工作就会将自己的工作总结好发出来与大家一起分享,我也知道这样做的好处。只是一直懒不愿意去写。每次都是在工作的时候东拼西凑的把工作好不容易完成,完事以后根本不想再回头去整理这些。久了以后发现自己都看不懂之前写的那些破代码了。
   于是暗下决心以后一定痛定思痛、悔过自新!
   这两天的工作其实没有什么技术含量、只是我太久没有接触过了、导致一时手生。说简单点仅仅是个图片上传而已。只是中途涉及到一点修改和覆盖的逻辑。
要求是这样的,在提交一条稿件时需要上传图片,图片上传到服务器上,地址存在表里。很简单的也许两年前让我写也就是一个小时的事情。可是现在却耽误了我两天让我觉得自己退化的实在有点可怕。
   废话多了。开始说开发吧
首先jsp页面
上传图片,先在页面上的form表单中建个file提交对象
[flash=200,200]
[/flash]
因为用的是webwork框架所以自定义成提交都以jspa形式。和struts的*.do到action是一个意思
红色部分multipart/form-data是提交form表单用来传输文件流用的。记得很久以前这样写过。我当时忘了写了,害我找了半天都找不着,如果不填action的file对象一直是空的。
webwork的action层
必须声明一个和页面的file提交对象名称一致的file对象
private File [color=darkred]linknewsPic[/color];
private String [color=darkred]linknewsPicFileName;[/color]//文件名称也必须以fileName结尾。不知道为什么这样。这段完全是听同事的。
//保存方法
//开始上//上传图片
if(linknewsPic!=null){
    IPortalWindowService pws =(IPortalWindowService)getBean("portalWindowService");
        SystemManager sm = SystemManager.getInstance();//创建读取系统文件对象
	String picBasePath = sm.getPropValue("xhpPicBasePath");//读取/conf.properties";配置文件(我这里是xhpPicBasePath=/temp)在windows下Webllogic默认把地址创建在Webllogic默认的盘符下的根目录下
	SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd");
	String str = sf.format(dt);
	//获取文件后缀名
	String hzname = linknewsPicFileName.substring(linknewsPicFileName.length()-4);//因为jsp的js验证已经限制了文件格式。所以默认截取的这最后的后缀名为.jpg或者.gif之类的后缀。
	File picFile = new File(picBasePath+ "/" + str + "/" + System.currentTimeMillis() + hzname);//创建新的file对象给定地址为刚刚读取的地址加以年月日生成的目录。文件名称以当前的时间毫秒值为名称。(内部系统不存在多人同时上传的可能所以毫秒值完全满足)
	System.out.println("文件保存路径:"+picFile.getPath());
	boolean isupd = saveAs(picFile.getPath());//上传方法 
	if(isupd){
	    System.out.println("链接稿图片上传成功!");
	    System.out.println(picFile.getAbsolutePath());
	    tanlink.setIMAGEDIR(picFile.getPath());
	    tanlink.setISCOPYURL("0");
	}else{
	    System.out.println("链接稿图片上传失败!");
	    resultMap.put("modify", "链接稿图片上传失败,修改失败");
	    return SUCCESS;
	 }
					
    }


//上传方法
public boolean saveAs(String destFilePathName) {
		final int BUFFER = 2048;//缓存字节
		InputStream in = null;//创建输入流对象
		OutputStream out = null;//输出流对象
		try {
			
			File loadFile = new File(destFilePathName);//创建文件对象
			int count;
			byte data[] = new byte[BUFFER];//读取文件字节数组
			File parentFile = loadFile.getParentFile();//获取要上传文件的上级目录
			if (parentFile!=null && !parentFile.exists()) {
				if(!parentFile.mkdirs()){//创建该文件目录包括年月日的目录
					logger.warn("error mkdirs:"+parentFile.getAbsolutePath());
					return false;//如果创建失败则返回
				}
			}
			// write the files to the disk
			out = new FileOutputStream(loadFile);//创建文件输入流对象
			in = new FileInputStream(this.getLinknewsPic());//读取流
			while ((count = in.read(data, 0, BUFFER)) != -1) {//每次写入指定字节数
				out.write(data, 0, count);
			}
			out.flush();//清空输入流
		} catch (UnknownHostException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
				if (in != null) {in.close();}
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				if (out != null) {out.close();}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return true;
	}


jsp中的js验证限制文件格式
<form id="editLinkNews" action="saveLinkNews.jspa" method="post" onsubmit="return

checkForm(this);" enctype="multipart/form-data">
function checkForm(form){
		  if(form.linktitle.value==""){
			  alert("请输入稿件名称");
			  return false;
		  }
		  if(form.linksourceurl.value==""){
			  alert("请输入稿件地址");
			  return false;
		  }
		  if(form.news_date.value==""){
			  alert("稿件发布时间不填则为系统当前时间");
		  }
		  if(form.out_time.value==""){
			  alert("稿件过期时间不填则为系统当前时间");
		  }
		  
		// alert(form.elements['iscopy'].length);
		 
		  var radio = form.iscopy;
		  for(i=0;i<radio.length;i++){
		  	var check = radio[i].checked;
		  	if(check){
		  		iscopyvalue = radio[i].value;
		  		
		  		if(iscopyvalue=="1"){
				  	var s = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
				  	var picValue= form.elements["coplinknewsPic"].value;
				  	if(picValue!="" && !picValue.match(s)){
						alert("请重新输入格式正确的网址再提交!");
						return false;
					}
				}else{
				  	 var s = /^.*?\.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG){1}$/;
					 var picValue = form.elements["linknewsPic"].value;
					 if(picValue!="" && !picValue.match(s)){
						alert("请重新选择正确的图片格式上传,支持的格式有*.jpg,*.jpeg,*.gif,*.png");
						return false;
			     }
			  }
		   break;
		  	}
		    }
		}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics