1.首先应配置tomcate属性,在/tomcate/conf/service.xml里配置如下:
<!-- Define the default virtual host Note: XML Schema validation will not work with Xerces 2.2. --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <!-- <Context path="/qfcars/file_img" docBase="E:/tomcat-file/tomcat80/qfcars/file_img" debug="0" reloadable="true" /> <Context path="/fupin/images" docBase="D:/tomcat-file/tomcat80/fupin/images" reloadable="true" /> --> <Context path="/linkms/webImages" docBase="E:/tomcat-file/linkms/upload/webImages" reloadable="true" /> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!--
<!--属性说明
name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost
虚拟主机名
debug:是日志的调试等级
appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于 $CATALINA_HOME/ (web applications的基本目录)
unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件.
如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.
autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用
-->
<!--属性说明
path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须.
表示此web application的URL的前缀,用来匹配一个Context。请求的URL形式为http://localhost:8080/path/*
docBase:WEB应用的目录,此目录必须符号Java WEB应用的规范.
web application的文件存放路径或者是WAR文件存放路径
debug:日志等级
reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件.
如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib
和/WEB-INF/classes目录的变化,自动装载新的JSP和Servlet,我们可以在不重起
Tomcat的情况下改变web application
-->
2.配置完 .xml文件后,我们需要创建相关的文件。如上1中的文件路径。
E:/tomcat-file/linkms/upload/webImages. tomcate在加载时将会自动获取该目录下的所有图片/文件。
3.配置SSH框架的文件属性。如下:
(1)创建一个upload.property.
(2)在.property里配置:
ueditor.upLoadUrl=E:/tomcat-file/linkms/file_img
EXCEL2003_MAX_SIZE_LIMIT=5242880
localUri = E:/tomcat-file/linkms/upload
fileUri =/webImages
//这里使用的是百度编辑器的文件图片上传(设置本地路径,文件名和最大上传文件大小)
4.编写上传文件的action(注这里不讨论model模型的上传文件类,在service上主要是对数据库的增加操作,只需将上传文件的相对路径存到数据库即可!)
/** * 设置图片logo上传 */ public String uploadPic(){ String imgUrl=""; try { String localUri = ApplicationProperties.getMessage("localUri"); String fileUri = ApplicationProperties.getMessage("fileUri"); if(pic !=null && picFileName != null){//上传单张图片 imgUrl=HttpFileUtil.upLoadFileToURI(pic,picFileName, localUri, fileUri); webObj.setLogo(imgUrl); }else if (pics != null && picsFileName != null) {//上传多张图片 for (int i = 0; i < pics.size(); i++) { imgUrl+=HttpFileUtil.upLoadFileToURI(pics.get(i),picsFileName.get(i), localUri, fileUri); } webObj.setLogo(imgUrl); } } catch (Exception e) { e.printStackTrace(); } if(imgUrl.indexOf(",",imgUrl.length()-1)>0){//判断是否是imgurl有多余的,分割符号 imgUrl=imgUrl.substring(0,imgUrl.length()-1);//去掉多余的符号 } Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("imgUrl", imgUrl); setJsonResult(JSONObject.fromObject(jsonMap)); return SUCCESS; } private File pic; private String picFileName; public File getPic() { return pic; } public void setPic(File pic) { this.pic = pic; } public String getPicFileName() { return picFileName; } public void setPicFileName(String picFileName) { this.picFileName = picFileName; }
5.前端的显示
<input type="hidden" id="itemlogo" name="webObj.logo" /> <img id="logoPic" width="160px" height="90px" alt="logo" /> <input id="pic" class="easyui-validatebox" type="file" name="pic" onchange="upLogoPic()" /> var select = $('#datagrid_ui_table').datagrid('getSelected'); $("#logoPic").attr("src","." + select.logo); //文件上传同时把图片的url赋值给webObj.url function upLogoPic() { $("#addForm").attr("enctype", "multipart/form-data"); $("#addForm").form("submit", { url : 'companyInfoPort!uploadPic.action', onSubmit : function() { if ($("#addForm").form("validate"))//校验,显示上传 { $.messager.progress({ text : "上传中" }); } return $("#addForm").form("validate"); }, success : function(data) { var dataObj = eval("(" + data + ")");//转换为json对象webObj.updateDate //赋值给图片url,页面进行了隐藏处 $('#itemlogo').val(dataObj.imgUrl); $.messager.progress('close'); } }); }
6.在页面上传文件时,浏览器还会弹出一个提示是否下载的提示框,如果我们不想每次下载的时候都出现这个提示框,我们可以在struts中配置如下:
<param name="contentType">text/html</param>
(使用的是jquery - easyui 技术)。