使用apache.commons.fileupload等进行文件上传

表单里有上传文件

url:http://wanglizhuang.javaeye.com/blog/466524

文章分类:Web前端 关键字: 上传文件和获取表单值
Java代码 复制代码
  1. 在servlet里的代码如下:
在servlet里的代码如下:
Java代码 复制代码
  1. String[]string={"title","type","content"};//表单里其他内容的name
  2. Stringfilename=FileSave.save(request,response,string);//保存文件获取保存的文件名称
  3. map=FileSave.map;//获取值
String[] string = { "title", "type", "content"};//表单里其他内容的name
String filename = FileSave.save(request, response, string); // 保存文件获取保存的文件名称
map = FileSave.map;//获取值

下面是公共类:

Java代码 复制代码
  1. packagecn.com.crystalnet.common;
  2. importjava.io.File;
  3. importjava.io.IOException;
  4. importjava.io.PrintWriter;
  5. importjava.io.UnsupportedEncodingException;
  6. importjava.util.HashMap;
  7. importjava.util.Iterator;
  8. importjava.util.List;
  9. importjava.util.Map;
  10. importjavax.servlet.http.HttpServletRequest;
  11. importjavax.servlet.http.HttpServletResponse;
  12. importorg.apache.commons.fileupload.FileItem;
  13. importorg.apache.commons.fileupload.FileUploadException;
  14. importorg.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
  15. importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
  16. importorg.apache.commons.fileupload.servlet.ServletFileUpload;
  17. /**
  18. *title:处理文件上传
  19. *@author王立壮
  20. *
  21. */
  22. publicclassFileSave{
  23. publicstaticMapmap=null;
  24. publicstaticStringsave(HttpServletRequestrequest,HttpServletResponseresponse,String[]paramName){
  25. Stringu_name=null;
  26. map=newHashMap();
  27. finallongMAX_SIZE=3*1024*1024;//设置上传文件最大为3M
  28. //允许上传的文件格式的列表
  29. finalString[]allowedExt=newString[]{"gif","jpg","png","word","excel","txt","zip","ppt","pdf"};
  30. response.setContentType("text/html");
  31. //设置字符编码为UTF-8,这样支持汉字显示
  32. response.setCharacterEncoding("UTF-8");
  33. //实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
  34. DiskFileItemFactorydfif=newDiskFileItemFactory();
  35. dfif.setSizeThreshold(4096);//设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
  36. dfif.setRepository(newFile(request.getRealPath("/")
  37. +"ImagesUploadTemp"));//设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
  38. //用以上工厂实例化上传组件
  39. ServletFileUploadsfu=newServletFileUpload(dfif);
  40. //设置最大上传尺寸
  41. sfu.setSizeMax(MAX_SIZE);
  42. PrintWriterout=null;
  43. try{
  44. out=response.getWriter();
  45. }catch(IOExceptione1){
  46. //TODOAuto-generatedcatchblock
  47. e1.printStackTrace();
  48. }
  49. //从request得到所有上传域的列表
  50. ListfileList=null;
  51. try{
  52. fileList=sfu.parseRequest(request);
  53. if(fileList!=null){
  54. for(Iteratoritr=fileList.iterator();itr.hasNext();){
  55. FileItemfileItem=(FileItem)itr.next();
  56. for(inti=0;i<paramName.length;i++){
  57. if(fileItem.getFieldName().equalsIgnoreCase(
  58. paramName[i])){
  59. map.put(fileItem.getFieldName(),newString(fileItem.getString().getBytes("ISO8859-1"),"UTF-8"));//中文转码
  60. }
  61. }
  62. }
  63. }
  64. System.out.println(fileList.size());
  65. }catch(FileUploadExceptione){//处理文件尺寸过大异常
  66. if(einstanceofSizeLimitExceededException){
  67. out.println("文件尺寸超过规定大小:"+MAX_SIZE+"字节<p/>");
  68. out.println("<ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");
  69. }
  70. e.printStackTrace();
  71. }catch(UnsupportedEncodingExceptione){
  72. //TODOAuto-generatedcatchblock
  73. e.printStackTrace();
  74. }
  75. //没有文件上传
  76. if(fileList==null||fileList.size()==0){
  77. out.println("请选择上传文件<p/>");
  78. out.println("<ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");
  79. }
  80. //得到所有上传的文件
  81. IteratorfileItr=fileList.iterator();
  82. //循环处理所有文件
  83. while(fileItr.hasNext()){
  84. FileItemfileItem=null;
  85. Stringpath=null;
  86. longsize=0;
  87. //得到当前文件
  88. fileItem=(FileItem)fileItr.next();
  89. //忽略简单form字段而不是上传域的文件域(<inputtype="text"/>等)
  90. if(fileItem==null||fileItem.isFormField()){
  91. continue;
  92. }
  93. //得到文件的完整路径
  94. path=fileItem.getName();
  95. //得到文件的大小
  96. size=fileItem.getSize();
  97. if("".equals(path)||size==0){
  98. out.println("请选择上传文件<p/>");
  99. out.println("<ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");
  100. break;
  101. }
  102. //得到去除路径的文件名
  103. Stringt_name=path.substring(path.lastIndexOf("//")+1);
  104. //得到文件的扩展名(无扩展名时将得到全名)
  105. Stringt_ext=t_name.substring(t_name.lastIndexOf(".")+1);
  106. //拒绝接受规定文件格式之外的文件类型
  107. intallowFlag=0;
  108. intallowedExtCount=allowedExt.length;
  109. for(;allowFlag<allowedExtCount;allowFlag++){
  110. if(allowedExt[allowFlag].equals(t_ext))
  111. break;
  112. }
  113. if(allowFlag==allowedExtCount){
  114. out.println("请上传以下类型的文件<p/>");
  115. for(allowFlag=0;allowFlag<allowedExtCount;allowFlag++)
  116. out.println("*."+allowedExt[allowFlag]
  117. +"&nbsp;&nbsp;&nbsp;");
  118. out
  119. .println("<p/><ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");
  120. }
  121. longnow=System.currentTimeMillis();
  122. //根据系统时间生成上传后保存的文件名
  123. Stringprefix=String.valueOf(now);
  124. //保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
  125. u_name=request.getRealPath("/")+"Back//mailUpload//"
  126. +prefix+"."+t_ext;
  127. try{
  128. //保存文件
  129. fileItem.write(newFile(u_name));
  130. u_name="mailUpload/"+prefix+"."+t_ext;
  131. }catch(Exceptione){
  132. e.printStackTrace();
  133. }
  134. }
  135. returnu_name;
  136. }
  137. }
package cn.com.crystalnet.common;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
 * title:处理文件上传
 * @author 王立壮
 *
 */

public class FileSave {
	
	public static Map map = null;

	public static String save(HttpServletRequest request, HttpServletResponse response,String[] paramName) {
		
		String u_name = null;
		
		map = new HashMap();
		
		final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M
		// 允许上传的文件格式的列表
		final String[] allowedExt = new String[] { "gif","jpg","png","word","excel","txt","zip","ppt","pdf"  };
		response.setContentType("text/html");
		// 设置字符编码为UTF-8, 这样支持汉字显示
		response.setCharacterEncoding("UTF-8");

		// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
		DiskFileItemFactory dfif = new DiskFileItemFactory();
		dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
		dfif.setRepository(new File(request.getRealPath("/")
				+ "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录

		// 用以上工厂实例化上传组件
		ServletFileUpload sfu = new ServletFileUpload(dfif);
		// 设置最大上传尺寸
		sfu.setSizeMax(MAX_SIZE);

		PrintWriter out = null;
		try {
			out = response.getWriter();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		// 从request得到 所有 上传域的列表
		List fileList = null;
	
		try {
			fileList = sfu.parseRequest(request);
			
			if (fileList != null) {
				for (Iterator itr = fileList.iterator(); itr.hasNext();) {
					FileItem fileItem = (FileItem) itr.next();
					for (int i = 0; i < paramName.length; i++) {
						if (fileItem.getFieldName().equalsIgnoreCase(
								paramName[i])) {
							map.put(fileItem.getFieldName(), new String(fileItem.getString().getBytes("ISO8859-1"),"UTF-8"));// 中文转码
						}
					}
				}
			}
			
			System.out.println(fileList.size());
		} catch (FileUploadException e) {// 处理文件尺寸过大异常
			if (e instanceof SizeLimitExceededException) {
				out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
				out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");

			}
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 没有文件上传
		if (fileList == null || fileList.size() == 0) {
			out.println("请选择上传文件<p />");
			out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");

		}
		// 得到所有上传的文件
		Iterator fileItr = fileList.iterator();
		// 循环处理所有文件

		while (fileItr.hasNext()) {
			FileItem fileItem = null;
			String path = null;
			long size = 0;
			// 得到当前文件
			fileItem = (FileItem) fileItr.next();
			// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
			if (fileItem == null || fileItem.isFormField()) {
				continue;
			}
			// 得到文件的完整路径
			path = fileItem.getName();
			// 得到文件的大小
			size = fileItem.getSize();
			if ("".equals(path) || size == 0) {
				out.println("请选择上传文件<p />");
				out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");
				break;

			}

			// 得到去除路径的文件名
			String t_name = path.substring(path.lastIndexOf("//") + 1);
			// 得到文件的扩展名(无扩展名时将得到全名)
			String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
			// 拒绝接受规定文件格式之外的文件类型
			int allowFlag = 0;
			int allowedExtCount = allowedExt.length;
			for (; allowFlag < allowedExtCount; allowFlag++) {
				if (allowedExt[allowFlag].equals(t_ext))
					break;
			}
			if (allowFlag == allowedExtCount) {
				out.println("请上传以下类型的文件<p />");
				for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
					out.println("*." + allowedExt[allowFlag]
							+ "&nbsp;&nbsp;&nbsp;");
				out
						.println("<p /><a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");

			}

			long now = System.currentTimeMillis();
			// 根据系统时间生成上传后保存的文件名
			String prefix = String.valueOf(now);
			// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
			u_name = request.getRealPath("/") + "Back//mailUpload//"
					+ prefix + "." + t_ext;
			try {
				// 保存文件
				fileItem.write(new File(u_name));
				u_name = "mailUpload/"+ prefix + "." + t_ext;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
			
		return u_name;
	}

}

==========================================================

jsp文件上传

url:http://myrl1023.javaeye.com/blog/265398

选把上传文件的插件cos下下来;
upload.html
Java代码 复制代码
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
  5. <title>文件上传前台控制检测程序v0.6</title>
  6. <style>
  7. body,td{font-size:12px;}
  8. </style>
  9. <scriptlanguage=javascript>
  10. varImgObj=newImage();//建立一个图像对象
  11. varAllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型
  12. varFileObj,ImgFileSize,ImgWidth,ImgHeight,FileExt,ErrMsg,FileMsg,HasCheked,IsImg//全局变量图片相关属性
  13. //以下为限制变量
  14. varAllowExt=".jpg|.gif|.doc|.txt|"//允许上传的文件类型?为无限制每个扩展名后边要加一个"|"小写字母表示
  15. //varAllowExt=0
  16. varAllowImgFileSize=70;//允许上传图片文件的大小0为无限制单位:KB
  17. varAllowImgWidth=500;//允许上传的图片的宽度?为无限制 单位:px(像素)
  18. varAllowImgHeight=500;//允许上传的图片的高度?为无限制 单位:px(像素)
  19. HasChecked=false;
  20. functionCheckProperty(obj)//检测图像属性
  21. {
  22. FileObj=obj;
  23. if(ErrMsg!="")//检测是否为正确的图像文件 返回出错信息并重置
  24. {
  25. ShowMsg(ErrMsg,false);
  26. returnfalse;//返回
  27. }
  28. if(ImgObj.readyState!="complete")//如果图像是未加载完成进行循环检测
  29. {
  30. setTimeout("CheckProperty(FileObj)",500);
  31. returnfalse;
  32. }
  33. ImgFileSize=Math.round(ImgObj.fileSize/1024*100)/100;//取得图片文件的大小
  34. ImgWidth=ImgObj.width//取得图片的宽度
  35. ImgHeight=ImgObj.height;//取得图片的高度
  36. FileMsg="/n图片大小:"+ImgWidth+"*"+ImgHeight+"px";
  37. FileMsg=FileMsg+"/n图片文件大小:"+ImgFileSize+"Kb";
  38. FileMsg=FileMsg+"/n图片文件扩展名:"+FileExt;
  39. if(AllowImgWidth!=0&&AllowImgWidth<ImgWidth)
  40. ErrMsg=ErrMsg+"/n图片宽度超过限制。请上传宽度小于"+AllowImgWidth+"px的文件,当前图片宽度为"+ImgWidth+"px";
  41. if(AllowImgHeight!=0&&AllowImgHeight<ImgHeight)
  42. ErrMsg=ErrMsg+"/n图片高度超过限制。请上传高度小于"+AllowImgHeight+"px的文件,当前图片高度为"+ImgHeight+"px";
  43. if(AllowImgFileSize!=0&&AllowImgFileSize<ImgFileSize)
  44. ErrMsg=ErrMsg+"/n图片文件大小超过限制。请上传小于"+AllowImgFileSize+"KB的文件,当前文件大小为"+ImgFileSize+"KB";
  45. if(ErrMsg!="")
  46. ShowMsg(ErrMsg,false);
  47. else
  48. ShowMsg(FileMsg,true);
  49. }
  50. ImgObj.οnerrοr=function(){ErrMsg='/n图片格式不正确或者图片已损坏!'}
  51. functionShowMsg(msg,tf)//显示提示信息tf=true显示文件信息tf=false显示错误信息msg-信息内容
  52. {
  53. msg=msg.replace("/n","<li>");
  54. msg=msg.replace(//n/gi,"<li>");
  55. if(!tf)
  56. {
  57. document.all.UploadButton.disabled=true;
  58. FileObj.outerHTML=FileObj.outerHTML;
  59. MsgList.innerHTML=msg;
  60. HasChecked=false;
  61. }
  62. else
  63. {
  64. document.all.UploadButton.disabled=false;
  65. if(IsImg)
  66. PreviewImg.innerHTML="<imgsrc='"+ImgObj.src+"'width='60'height='60'>"
  67. else
  68. PreviewImg.innerHTML="非图片文件";
  69. MsgList.innerHTML=msg;
  70. HasChecked=true;
  71. }
  72. }
  73. functionCheckExt(obj)
  74. {
  75. ErrMsg="";
  76. FileMsg="";
  77. FileObj=obj;
  78. IsImg=false;
  79. HasChecked=false;
  80. PreviewImg.innerHTML="预览区";
  81. if(obj.value=="")returnfalse;
  82. MsgList.innerHTML="文件信息处理中...";
  83. document.all.UploadButton.disabled=true;
  84. FileExt=obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();
  85. if(AllowExt!=0&&AllowExt.indexOf(FileExt+"|")==-1)//判断文件类型是否允许上传
  86. {
  87. ErrMsg="/n该文件类型不允许上传。请上传"+AllowExt+"类型的文件,当前文件类型为"+FileExt;
  88. ShowMsg(ErrMsg,false);
  89. returnfalse;
  90. }
  91. if(AllImgExt.indexOf(FileExt+"|")!=-1)//如果图片文件,则进行图片信息处理
  92. {
  93. IsImg=true;
  94. ImgObj.src=obj.value;
  95. CheckProperty(obj);
  96. returnfalse;
  97. }
  98. else
  99. {
  100. FileMsg="/n文件扩展名:"+FileExt;
  101. ShowMsg(FileMsg,true);
  102. }
  103. }
  104. functionSwitchUpType(tf)
  105. {
  106. if(tf)
  107. str='<inputtype="file"name="file1"οnchange="CheckExt(this)"style="width:180px;">'
  108. else
  109. str='<inputtype="text"name="file1"οnblur="CheckExt(this)"style="width:180px;">'
  110. document.all.file1.outerHTML=str;
  111. document.all.UploadButton.disabled=true;
  112. MsgList.innerHTML="";
  113. }
  114. </script>
  115. </head>
  116. <body>
  117. <formenctype="multipart/form-data"method="POST"action="./upload.jsp?folderName=uploadImage&relativePath=../../"οnsubmit="returnHasChecked;">
  118. <fieldsetstyle="width:400px;height:60;padding:2px;">
  119. <legend><fontcolor="#FF0000">图片来源</font></legend>
  120. <inputtype="radio"name="radio1"checkedοnclick="SwitchUpType(true);">本地<inputtype="radio"name="radio1"οnclick="SwitchUpType(false);">远程:<inputtype="file"name="file1"οnchange="CheckExt(this)"style="width:180px;"><inputtype="submit"id="UploadButton"value="开始上传"disabled>
  121. <br>图片描述:&nbsp;<inputtype="text"name="imgdes"id="imgdes"size="40">
  122. <divstyle="border:1solid#808080;background:#E0E0E0;width100%;height:20px;color:#606060;padding:5px;">
  123. <tableborder="0"><tr><tdwidth="60"id="PreviewImg">预览区</td><tdid="MsgList"valign="top"></td></tr></table>
  124. </div>
  125. </fieldset>
  126. </form>
  127. </body>
  128. </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传前台控制检测程序 v0.6</title>
<style>
body,td{font-size:12px;}
</style>
<script language=javascript>


var ImgObj=new Image();      //建立一个图像对象

var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型
var FileObj,ImgFileSize,ImgWidth,ImgHeight,FileExt,ErrMsg,FileMsg,HasCheked,IsImg//全局变量图片相关属性

//以下为限制变量
var AllowExt=".jpg|.gif|.doc|.txt|"  //允许上传的文件类型 ?为无限制 每个扩展名后边要加一个"|" 小写字母表示
//var AllowExt=0
var AllowImgFileSize=70;    //允许上传图片文件的大小 0为无限制  单位:KB
var AllowImgWidth=500;      //允许上传的图片的宽度 ?为无限制 单位:px(像素)
var AllowImgHeight=500;      //允许上传的图片的高度 ?为无限制 单位:px(像素)

HasChecked=false;

function CheckProperty(obj)    //检测图像属性
{
  FileObj=obj;
  if(ErrMsg!="")      //检测是否为正确的图像文件 返回出错信息并重置
  {
    ShowMsg(ErrMsg,false);
    return false;      //返回
  }

  if(ImgObj.readyState!="complete")  //如果图像是未加载完成进行循环检测
  {
    setTimeout("CheckProperty(FileObj)",500);
    return false;
  }

  ImgFileSize=Math.round(ImgObj.fileSize/1024*100)/100;//取得图片文件的大小
  ImgWidth=ImgObj.width      //取得图片的宽度
  ImgHeight=ImgObj.height;    //取得图片的高度
  FileMsg="/n图片大小:"+ImgWidth+"*"+ImgHeight+"px";
  FileMsg=FileMsg+"/n图片文件大小:"+ImgFileSize+"Kb";
  FileMsg=FileMsg+"/n图片文件扩展名:"+FileExt;

  if(AllowImgWidth!=0&&AllowImgWidth<ImgWidth)
    ErrMsg=ErrMsg+"/n图片宽度超过限制。请上传宽度小于"+AllowImgWidth+"px的文件,当前图片宽度为"+ImgWidth+"px";

  if(AllowImgHeight!=0&&AllowImgHeight<ImgHeight)
    ErrMsg=ErrMsg+"/n图片高度超过限制。请上传高度小于"+AllowImgHeight+"px的文件,当前图片高度为"+ImgHeight+"px";

  if(AllowImgFileSize!=0&&AllowImgFileSize<ImgFileSize)
    ErrMsg=ErrMsg+"/n图片文件大小超过限制。请上传小于"+AllowImgFileSize+"KB的文件,当前文件大小为"+ImgFileSize+"KB";

  if(ErrMsg!="")
    ShowMsg(ErrMsg,false);
  else
    ShowMsg(FileMsg,true);
}

ImgObj.οnerrοr=function(){ErrMsg='/n图片格式不正确或者图片已损坏!'}

function ShowMsg(msg,tf)  //显示提示信息 tf=true 显示文件信息 tf=false 显示错误信息 msg-信息内容
{
  msg=msg.replace("/n","<li>");
  msg=msg.replace(//n/gi,"<li>");
  if(!tf)
  {
    document.all.UploadButton.disabled=true;
    FileObj.outerHTML=FileObj.outerHTML;
    MsgList.innerHTML=msg;
    HasChecked=false;
  }
  else
  {
    document.all.UploadButton.disabled=false;
    if(IsImg)
      PreviewImg.innerHTML="<img src='"+ImgObj.src+"' width='60' height='60'>"
    else
      PreviewImg.innerHTML="非图片文件";
    MsgList.innerHTML=msg;
    HasChecked=true;
  }
}

function CheckExt(obj)
{
  ErrMsg="";
  FileMsg="";
  FileObj=obj;
  IsImg=false;
  HasChecked=false;
  PreviewImg.innerHTML="预览区";
  if(obj.value=="")return false;
  MsgList.innerHTML="文件信息处理中...";
  document.all.UploadButton.disabled=true;
  FileExt=obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();
  if(AllowExt!=0&&AllowExt.indexOf(FileExt+"|")==-1)  //判断文件类型是否允许上传
  {
    ErrMsg="/n该文件类型不允许上传。请上传 "+AllowExt+" 类型的文件,当前文件类型为"+FileExt;
    ShowMsg(ErrMsg,false);
    return false;
  }

  if(AllImgExt.indexOf(FileExt+"|")!=-1)    //如果图片文件,则进行图片信息处理
  {
    IsImg=true;
    ImgObj.src=obj.value;
    CheckProperty(obj);
    return false;
  }
  else
  {
    FileMsg="/n文件扩展名:"+FileExt;
    ShowMsg(FileMsg,true);
  }
 
}

function SwitchUpType(tf)
{
    if(tf)
     str='<input type="file" name="file1" οnchange="CheckExt(this)" style="width:180px;">'
    else
     str='<input type="text" name="file1" οnblur="CheckExt(this)" style="width:180px;">'
    document.all.file1.outerHTML=str;
    document.all.UploadButton.disabled=true;
    MsgList.innerHTML="";
}

</script>
</head>
<body>
<form enctype="multipart/form-data" method="POST" action="./upload.jsp?folderName=uploadImage&relativePath=../../" οnsubmit="return HasChecked;">
<fieldset style="width: 400px; height: 60;padding:2px;">
<legend><font color="#FF0000">图片来源</font></legend>
<input type="radio" name="radio1" checked οnclick="SwitchUpType(true);">本地<input type="radio" name="radio1" οnclick="SwitchUpType(false);">远程:<input type="file" name="file1" οnchange="CheckExt(this)" style="width:180px;"> <input type="submit" id="UploadButton" value="开始上传" disabled>
 <br>图片描述:&nbsp;<input type="text" name="imgdes" id="imgdes" size="40" >
<div style="border:1 solid #808080;background:#E0E0E0;width100%;height:20px;color:#606060;padding:5px;">
<table border="0"><tr><td width="60" id="PreviewImg">预览区</td><td id="MsgList" valign="top"></td></tr></table>
</div>
</fieldset>
</form>
</body>
</html>



upload.jsp
Java代码 复制代码
  1. <%@pagecontentType="text/html;charset=gbk"language="java"errorPage=""%>
  2. <%@pagelanguage="java"import="java.io.PrintWriter"%>
  3. <%@pagelanguage="java"import="java.io.*"%>
  4. <%@pagelanguage="java"import="java.util.UUID"%>
  5. <%@pagelanguage="java"import="java.util.Enumeration"%>
  6. <%@pagelanguage="java"import="com.oreilly.servlet.MultipartRequest"%>
  7. <%@pagelanguage="java"import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
  8. <%@pagelanguage="java"import="com.oreilly.servlet.multipart.FileRenamePolicy"%>
  9. <%
  10. response.setHeader("Cache-Control","no-cache");
  11. response.setCharacterEncoding("gb2312");
  12. PrintWriterxmlout=response.getWriter();
  13. Stringuuid=UUID.randomUUID().toString();
  14. //文件的fileURL
  15. StringfileURL="";
  16. //上传文件名
  17. StringfileName=null;
  18. //取得文件描述
  19. StringfileDesName="";
  20. StringBuffersb=newStringBuffer();
  21. Stringresult="";
  22. try
  23. {
  24. //得到此源文件的目录
  25. StringrealPath=getServletContext().getRealPath("");
  26. StringcontentPath=request.getContextPath();
  27. StringrequestURL=request.getRequestURL().toString();
  28. StringrealURL=requestURL.split(contentPath)[0]+contentPath;
  29. //上传文件存放的文件夹名称,一律放在根目录下的文件夹里面即folderName/
  30. StringfolderName=request.getParameter("folderName");
  31. //根据不同层级../../的路径不同
  32. StringrelativePath=request.getParameter("relativePath");
  33. //文件的相对路径
  34. StringcomparafileName="";
  35. //将上传文件存放在saveDirectory
  36. StringsaveDirectory=realPath+"/"+folderName;
  37. System.out.println("saveDirectory="+saveDirectory);
  38. FileuploadPath=newFile(saveDirectory);
  39. if(!uploadPath.exists())
  40. {
  41. uploadPath.mkdir();
  42. }
  43. //上传文件的大小限制在10MB
  44. intmaxPostSize=10*1024*1024;
  45. //实现将上传文件更名,以防同名覆盖和同时上传两个文件名相同的文件,自动在文件名后面加1(在1~9999范围内)
  46. FileRenamePolicypolicy=(FileRenamePolicy)newDefaultFileRenamePolicy();
  47. //上传文件
  48. MultipartRequestmulti=newMultipartRequest(request,saveDirectory,maxPostSize,"gb2312",policy);
  49. StringBufferfilenametemp=newStringBuffer();
  50. filenametemp.append(uuid);
  51. //在iidd后面加一下划线"-"以便和文件名称区分出来
  52. filenametemp.append("-");
  53. //取得文件描述
  54. fileDesName=multi.getParameter("imgdes");
  55. //System.out.println("文件描述:"+fileDesName);
  56. //取得所有上传文件名称
  57. Enumerationfilesname=multi.getFileNames();
  58. while(filesname.hasMoreElements())
  59. {
  60. Stringname=(String)filesname.nextElement();
  61. //文件上传的完整路径
  62. Filef=multi.getFile(name);
  63. //文件名称
  64. fileName=multi.getFilesystemName(name);
  65. if(fileName!=null)
  66. {
  67. StringoldFilename=fileName;
  68. intidx=oldFilename.lastIndexOf(".");
  69. Stringextention=oldFilename.substring(idx);
  70. //取文件名
  71. StringnewFilename=oldFilename.substring(0,idx);
  72. //得到不重复的文件名,用iidd加文件名
  73. StringsServerFileName=(String)filenametemp.toString();
  74. sServerFileName=sServerFileName+newFilename+extention;
  75. FilesServerFile=newFile(saveDirectory+"//"+sServerFileName);
  76. f.renameTo(sServerFile);
  77. StringFileName=sServerFile.getName();
  78. //放在上两级目录下(根目录的文件夹下)
  79. //StringcomparafileName="../../"+folderName+"/"+FileName;
  80. comparafileName=relativePath+folderName+"/"+FileName;
  81. System.out.print("文件的相对路径:"+comparafileName);
  82. fileURL=realURL+"/"+folderName+"/"+FileName;
  83. }
  84. }
  85. sb.append("<html><body>");
  86. sb.append("<inputid=/"UploadIsSucces/"type=/"hidden/"value=/"1/"/>");
  87. sb.append("图片已经上传成功!");
  88. sb.append("<br/>图片描述:");
  89. sb.append(fileDesName);
  90. sb.append("<br/>图片url:");
  91. sb.append(fileURL);
  92. Stringimg="<br/><imgsrc='"+fileURL+"'/>";
  93. Stringurll="http://localhost:8080/pictureupload/uploadImage/877700ca-bac3-4c07-92d5-0458010865e4-aa.jpg";
  94. Stringimg2="<br/><aherf=/"http://localhost:8080/pictureupload/upload.html/"><imgsrc='"+urll+"'/></a>";
  95. sb.append(img);
  96. sb.append(img2);
  97. sb.append("</body></html>");
  98. result=sb.toString();
  99. //System.out.println(rs);
  100. }
  101. catch(Exceptione)
  102. {
  103. System.out.println("message="+e.getMessage());
  104. //Postedcontentlengthof42654262exceedslimitof10485760
  105. Stringmessage=e.getMessage();
  106. if(message.indexOf("Postedcontentlengthof")!=-1)
  107. {
  108. Stringcontent=message.split("lengthof")[1].split("exceeds")[0];
  109. intct=Integer.parseInt(content);
  110. Stringlimit=message.split("limitof")[1];
  111. intlt=Integer.parseInt(limit);
  112. result="对不起,你上传的图片大小为"+ct/(1024*1024)+"MB,超过了最大限制"+lt/(1024*1024)+"MB";
  113. }
  114. else
  115. {
  116. result="上传失败";
  117. }
  118. e.printStackTrace();
  119. }
  120. try
  121. {
  122. xmlout.write(result);
  123. }
  124. catch(Exceptione)
  125. {
  126. e.printStackTrace();
  127. }
  128. finally
  129. {
  130. xmlout.flush();
  131. xmlout.close();
  132. }
  133. %>
<%@ page contentType="text/html; charset=gbk" language="java" errorPage="" %>
<%@ page language="java" import="java.io.PrintWriter"%>
<%@ page language="java" import="java.io.*"%>
<%@ page language="java" import="java.util.UUID"%>
<%@ page language="java" import="java.util.Enumeration"%>
<%@ page language="java" import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@ page language="java" import="com.oreilly.servlet.multipart.FileRenamePolicy"%>

<%
    response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("gb2312");
PrintWriter xmlout = response.getWriter();
String uuid = UUID.randomUUID().toString();
//文件的fileURL
String fileURL = "";
// 上传文件名 
String fileName = null;
//取得文件描述 
String fileDesName = "";
StringBuffer sb = new StringBuffer();
String result = "";

try
{
   //得到此源文件的目录 
   String realPath = getServletContext().getRealPath("");
   String contentPath = request.getContextPath();
   String requestURL = request.getRequestURL().toString();
   String realURL = requestURL.split(contentPath)[0] + contentPath;
   //上传文件存放的文件夹名称,一律放在根目录下的文件夹里面即folderName/
    String folderName = request.getParameter("folderName");
   //根据不同层级../../的路径不同
   String relativePath = request.getParameter("relativePath");
   //文件的相对路径
   String comparafileName = "";
  
   // 将上传文件存放在saveDirectory 
    String saveDirectory = realPath + "/" + folderName;
   System.out.println("saveDirectory= " + saveDirectory);
   File uploadPath = new File(saveDirectory);
  
   if (!uploadPath.exists())
   {
    uploadPath.mkdir();
   }

   // 上传文件的大小限制在10 MB 
   int maxPostSize = 10 * 1024 * 1024;
  
     //实现将上传文件更名,以防同名覆盖和同时上传两个文件名相同的文件,自动在文件名后面加1(在1~9999范围内)
    FileRenamePolicy policy =(FileRenamePolicy)new DefaultFileRenamePolicy(); 
   // 上传文件
    MultipartRequest multi = new MultipartRequest(request,saveDirectory, maxPostSize, "gb2312",policy);
   StringBuffer filenametemp = new StringBuffer();
    filenametemp.append(uuid);
    //在iidd后面加一下划线"-"以便和文件名称区分出来
    filenametemp.append("-");
   //取得文件描述 
    fileDesName = multi.getParameter("imgdes");
    //System.out.println("文件描述:"+ fileDesName);
   // 取得所有上传文件名称
   Enumeration filesname = multi.getFileNames();
  
   while (filesname.hasMoreElements()) 
   {
    String name = (String) filesname.nextElement();    
    //文件上传的完整路径
    File f = multi.getFile(name);
    //文件名称
    fileName = multi.getFilesystemName(name);
   
    if (fileName != null) 
    {
     String oldFilename=fileName;
     int idx=oldFilename.lastIndexOf("."); 
     String extention=oldFilename.substring(idx);
     //取文件名 
     String newFilename=oldFilename.substring(0,idx);
     //得到不重复的文件名,用iidd加文件名
     String sServerFileName = (String)filenametemp.toString();
     sServerFileName =sServerFileName+newFilename+extention;
     File sServerFile= new File(saveDirectory+"//" + sServerFileName);
     f.renameTo(sServerFile);
     String FileName = sServerFile.getName();
     //放在上两级目录下(根目录的文件夹下)
     //String comparafileName = "../../" + folderName + "/" + FileName;
     comparafileName = relativePath + folderName + "/" + FileName;
     System.out.print("文件的相对路径:"+comparafileName);
     fileURL = realURL + "/" + folderName + "/" + FileName;
    
    }
   }
  
   sb.append("<html><body>");
   sb.append("<input id = /"UploadIsSucces/" type=/"hidden/" value=/"1/" />");
   sb.append("图片已经上传成功!");
   sb.append("<br /> 图片描述:");
   sb.append(fileDesName);
   sb.append("<br />图片url:");
   sb.append(fileURL);
   String img = "<br /><img src='" + fileURL + "' />";
   String urll = "http://localhost:8080/pictureupload/uploadImage/877700ca-bac3-4c07-92d5-0458010865e4-aa.jpg";
   String img2="<br/><a herf=/"http://localhost:8080/pictureupload/upload.html/"> <img src='"+urll+"'/></a>";
   sb.append(img);
   sb.append(img2);
   sb.append("</body></html>");
   result = sb.toString();
   //System.out.println(rs);
}
catch(Exception e)
{
     System.out.println("message=" + e.getMessage());
   //Posted content length of 42654262 exceeds limit of 10485760
   String message = e.getMessage();
  
   if(message.indexOf("Posted content length of") !=-1)
   {
    String content = message.split("length of ")[1].split(" exceeds")[0];
    int ct = Integer.parseInt(content);
    String limit = message.split("limit of ")[1];
    int lt = Integer.parseInt(limit);
   
    result = "对不起,你上传的图片大小为" + ct/(1024*1024) + "MB,超过了最大限制" + lt/(1024*1024) + "MB" ;
   }
   else
   {
    result = "上传失败";
   }
  
   e.printStackTrace();
}


try
{
   xmlout.write(result);
}
catch (Exception e)
{
   e.printStackTrace();
}
finally
{
   xmlout.flush();
   xmlout.close();
}
%>


  • cos.jar (47.4 KB)
  • 下载次数: 88

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apachecommons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的,所以在进入项目前先确定Commons IO的jar包(本文使用commons-io-1.3.2.jar)在WEB-INF\lib下。 此文作示例工程可在文章最后的附件中下载。 示例1 最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。 demo1.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> //必须是multipart的表单数据。 <form name="myform" action="demo1.jsp" method="post" enctype="multipart/form-data"> Your name: <input type="text" name="name" size="15"><br> File: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> demo1.jsp <% boolean isMultipart = ServletFileUpload.isMultipartContent(request);//检查输入请求是否为multipart表单数据。 if (isMultipart == true) { FileItemFactory factory = new DiskFileItemFactory();//为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。 ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); //检查当前项目是普通表单项目还是上传文件。 if (item.isFormField()) {//如果是普通表单项目,显示表单内容。 String fieldName = item.getFieldName(); if (fieldName.equals("name")) //对应demo1.html中type="text" name="name" out.print("the field name is" + item.getString());//显示表单内容。 out.print(""); } else {//如果是上传文件,显示文件名。 out.print("the upload file name is" + item.getName()); out.print(""); } } } else { out.print("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: the field name isjeff the upload file name isD:\C语言考试样题\作业题.rar 示例2 上传两个文件到指定的目录。 demo2.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform" action="demo2.jsp" method="post" enctype="multipart/form-data"> File1: <input type="file" name="myfile"><br> File2: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> demo2.jsp <%String uploadPath="D:\\\\temp"; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart==true){ try{ FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request);//得到所有的文件 Iterator itr = items.iterator(); while(itr.hasNext()){//依次处理每个文件 FileItem item=(FileItem)itr.next(); String fileName=item.getName();//获得文件名,包括路径 if(fileName!=null){ File fullFile=new File(item.getName()); File savedFile=new File(uploadPath,fullFile.getName()); item.write(savedFile); } } out.print("upload succeed"); } catch(Exception e){ e.printStackTrace(); } } else{ out.println("the enctype must be multipart/form-data"); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 结果: upload succeed 此时,在"D:\temp"下可以看到你上传的两个文件。 示例3 上传一个文件到指定的目录,并限定文件大小。 demo3.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> <form name="myform" action="demo3.jsp" method="post" enctype="multipart/form-data"> File: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> demo3.jsp <% File uploadPath = new File("D:\\temp");//上传文件目录 if (!uploadPath.exists()) { uploadPath.mkdirs(); } // 临时文件目录 File tempPathFile = new File("d:\\temp\\buffer\\"); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);//设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);//得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile .getName()); fi.write(savedFile); } } out.print("upload succeed"); } catch (Exception e) { e.printStackTrace(); } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> </body> </html> 示例4 利用Servlet来实现文件上传Upload.java package com.zj.sample; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @SuppressWarnings("serial") public class Upload extends HttpServlet { private String uploadPath = "D:\\temp"; // 上传文件的目录 private String tempPath = "d:\\temp\\buffer\\"; // 临时文件目录 File tempPathFile; @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Set factory constraints factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb factory.setRepository(tempPathFile);// 设置缓冲区目录 // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List items = upload.parseRequest(request);// 得到所有的文件 Iterator i = items.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); String fileName = fi.getName(); if (fileName != null) { File fullFile = new File(fi.getName()); File savedFile = new File(uploadPath, fullFile.getName()); fi.write(savedFile); } } System.out.print("upload succeed"); } catch (Exception e) { // 可以跳转出错页面 e.printStackTrace(); } } public void init() throws ServletException { File uploadFile = new File(uploadPath); if (!uploadFile.exists()) { uploadFile.mkdirs(); } File tempPathFile = new File(tempPath); if (!tempPathFile.exists()) { tempPathFile.mkdirs(); } } } demo4.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>File upload</title> </head> <body> // action="fileupload"对应web.xml中中的设置. <form name="myform" action="fileupload" method="post" enctype="multipart/form-data"> File: <input type="file" name="myfile"><br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> web.xml Upload com.zj.sample.Upload Upload /fileupload
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值