网站不做301可以吗,清华大学网站建设方案,设计家官网室内设计,网店托管代运营费用多少钱本文介绍了#xff1a; 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用FileUtil上传 6.使用IOUtil上传 7.使用IOUtil上传 8.使用数组上传多个文件 9.使用List上传多个文件 ----1.基于表单的文件…本文介绍了 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用FileUtil上传 6.使用IOUtil上传 7.使用IOUtil上传 8.使用数组上传多个文件 9.使用List上传多个文件 ----1.基于表单的文件上传----- fileupload.jsp body form actionshowFile.jsp namemyForm methodpost enctypemultipart/form-data 选择上传的文件 input typefile namemyfilebr/br/ input typesubmit namemySubmit value上传/ /form /body showFile.jsp body 上传的文件的内容如下 % InputStream isrequest.getInputStream(); InputStreamReader isrnew InputStreamReader(is); BufferedReader brnew BufferedReader(isr); String contentnull; while((contentbr.readLine())!null){ out.print(contentbr/); } % /body ----2.手动上传----- 通过二进制刘获取上传文件的内容并将上传的文件内容保存到服务器的某个目录这样就实现了文件上传。由于这个处理过程完全依赖与开发自己处理二进制流所以也称为“手动上传”。 从上面的第一个例子可以看到使用二进制流获取的上传文件的内容与实际文件的内容有还是有一定的区别包含了很多实际文本中没有的字符。所以需要对获取的内容进行解析去掉额外的字符。----3 Struts2.文件上传---- Struts2中使用Common-fileUpload文件上传框架需要在web应用中增加两个Jar 文件 即 commons-fileupload.jar. commons-io.jar 需要使用fileUpload拦截器具体的说明在 struts2-core-2.3.4.jar \org.apache.struts2.interceptor\FileUploadInterceptor.class 里面 下面来看看一点源代码 public class FileUploadInterceptor extends AbstractInterceptor { private static final long serialVersionUID -4764627478894962478L; protected static final Logger LOG LoggerFactory.getLogger(FileUploadInterceptor.class); private static final String DEFAULT_MESSAGE no.message.found; protected boolean useActionMessageBundle; protected Long maximumSize; protected SetString allowedTypesSet Collections.emptySet(); protected SetString allowedExtensionsSet Collections.emptySet(); private PatternMatcher matcher; Inject public void setMatcher(PatternMatcher matcher) { this.matcher matcher; } public void setUseActionMessageBundle(String value) { this.useActionMessageBundle Boolean.valueOf(value); } //这就是struts.xml 中param为什么要配置为 allowedExtensions public void setAllowedExtensions(String allowedExtensions) { allowedExtensionsSet TextParseUtil.commaDelimitedStringToSet(allowedExtensions); } //这就是struts.xml 中param为什么要配置为 allowedTypes 而不是 上面的allowedTypesSet public void setAllowedTypes(String allowedTypes) { allowedTypesSet TextParseUtil.commaDelimitedStringToSet(allowedTypes); } public void setMaximumSize(Long maximumSize) { this.maximumSize maximumSize; } } 官员文件初始值大小 上面的类中的说明
limaximumSize (optional) - the maximum size (in bytes) that the interceptor will allow a file reference to be set * on the action. Note, this is bnot/b related to the various properties found in struts.properties. * Default to approximately 2MB./li
具体说的是这个值在struts.properties 中有设置。 下面就来看 里面的设置 ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data 文件上传解析器
# struts.multipart.parsercos
# struts.multipart.parserpell
#默认 使用jakata框架上传文件
struts.multipart.parserjakarta #上传时候 默认的临时文件目录
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir #上传时候默认的大小
struts.multipart.maxSize2097152 案例使用FileInputStream FileOutputStream文件流来上传 action.java package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class MyUpAction extends ActionSupport { private File upload; //上传的文件 private String uploadContentType; //文件的类型 private String uploadFileName; //文件名称 private String savePath; //文件上传的路径 //注意这里的保存路径 public String getSavePath() { return ServletActionContext.getRequest().getRealPath(savePath); } public void setSavePath(String savePath) { this.savePath savePath; } Override public String execute() throws Exception { System.out.println(type:this.uploadContentType); String fileNamegetSavePath()\\getUploadFileName(); FileOutputStream fosnew FileOutputStream(fileName); FileInputStream fisnew FileInputStream(getUpload()); byte[] bnew byte[1024]; int len0; while ((lenfis.read(b))0) { fos.write(b,0,len); } fos.flush(); fos.close(); fis.close(); return SUCCESS; } //get set } struts.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE struts PUBLIC -//Apache Software Foundation//DTD Struts Configuration 2.3//EN http://struts.apache.org/dtds/struts-2.3.dtd struts constant namestruts.i18n.encoding valueutf-8/ constant namestruts.devMode valuetrue/ constant namestruts.convention.classes.reload valuetrue / constant namestruts.multipart.saveDir valuef:/tmp/ package name/user extendsstruts-default action nameup classcom.sh.action.MyUpAction result nameinput/up.jsp/result result namesuccess/success.jsp/result !-- 在web-root目录下新建的一个 upload目录 用于保存上传的文件 -- param namesavePath/upload/param interceptor-ref namefileUpload !--采用设置文件的类型 来限制上传文件的类型-- param nameallowedTypestext/plain/param !--采用设置文件的后缀来限制上传文件的类型 -- param nameallowedExtensionspng,txt/param !--设置文件的大小 默认为 2M [单位byte] -- param namemaximumSize1024000/param /interceptor-ref interceptor-ref namedefaultStack/ /action /package /struts up.jsp body h2Struts2 上传文件/h2 s:fielderror/ s:form actionup methodpost nameupform idform1 enctypemultipart/form-data themesimple 选择文件 s:file nameupload cssStylewidth:300px;/ s:submit value确定/ /s:form /body success.jsp body b上传成功/b s:property valueuploadFileName/br/ [img]s:property valueupload/uploadFileName/[/img] /body 案例使用FileUtil上传 action.java package com.sh.action; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import java.util.UUID; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUtilUpload extends ActionSupport { private File image; //文件 private String imageFileName; //文件名 private String imageContentType;//文件类型 public String execute(){ try { if(image!null){ //文件保存的父目录 String realPathServletActionContext.getServletContext() .getRealPath(/image); //要保存的新的文件名称 String targetFileNamegenerateFileName(imageFileName); //利用父子目录穿件文件目录 File savefilenew File(new File(realPath),targetFileName); if(!savefile.getParentFile().exists()){ savefile.getParentFile().mkdirs(); } FileUtils.copyFile(image, savefile); ActionContext.getContext().put(message, 上传成功); ActionContext.getContext().put(filePath, targetFileName); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return success; } /** * new文件名 时间 随机数 * param fileName: old文件名 * return new文件名 */ private String generateFileName(String fileName) { //时间 DateFormat df new SimpleDateFormat(yyMMddHHmmss); String formatDate df.format(new Date()); //随机数 int random new Random().nextInt(10000); //文件后缀 int position fileName.lastIndexOf(.); String extension fileName.substring(position); return formatDate random extension; } //get set } struts.xml action namefileUtilUpload classcom.sh.action.FileUtilUpload result nameinput/fileutilupload.jsp/result result namesuccess/fuuSuccess.jsp/result /action fileutilupload.jsp form action${pageContext.request.contextPath }/fileUtilUpload.action enctypemultipart/form-data methodpost 文件input typefile nameimage/ input typesubmit value上传/ /form fuuSuccess.jsp body b${message}/b ${imageFileName}br/ img srcupload/${filePath}/ /body 案例使用IOUtil上传 action.java package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import org.apache.commons.io.IOUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class IOUtilUpload extends ActionSupport { private File image; //文件 private String imageFileName; //文件名 private String imageContentType;//文件类型 public String execute(){ try { if(image!null){ //文件保存的父目录 String realPathServletActionContext.getServletContext() .getRealPath(/image); //要保存的新的文件名称 String targetFileNamegenerateFileName(imageFileName); //利用父子目录穿件文件目录 File savefilenew File(new File(realPath),targetFileName); if(!savefile.getParentFile().exists()){ savefile.getParentFile().mkdirs(); } FileOutputStream fosnew FileOutputStream(savefile); FileInputStream fisnew FileInputStream(image); //如果复制文件的时候 出错了返回 值就是 -1 所以 初始化为 -2 Long result-2L; //大文件的上传 int smresult-2; //小文件的上传 //如果文件大于 2GB if(image.length()1024*2*1024){ resultIOUtils.copyLarge(fis, fos); }else{ smresultIOUtils.copy(fis, fos); } if(result -1 || smresult-1){ ActionContext.getContext().put(message, 上传成功); } ActionContext.getContext().put(filePath, targetFileName); } } catch (Exception e) { e.printStackTrace(); } return SUCCESS; } /** * new文件名 时间 全球唯一编号 * param fileName old文件名 * return new文件名 */ private String generateFileName(String fileName) { //时间 DateFormat df new SimpleDateFormat(yy_MM_dd_HH_mm_ss); String formatDate df.format(new Date()); //全球唯一编号 String uuidUUID.randomUUID().toString(); int position fileName.lastIndexOf(.); String extension fileName.substring(position); return formatDate uuid extension; } //get set } struts.xml action nameiOUtilUpload classcom.sh.action.IOUtilUpload result nameinput/ioutilupload.jsp/result result namesuccess/iuuSuccess.jsp/result /action ioutilupload.jsp form action${pageContext.request.contextPath }/iOUtilUpload.action enctypemultipart/form-data methodpost 文件input typefile nameimage/ input typesubmit value上传/
/form iuuSuccess.jsp body b${message}/b ${imageFileName}br/ img srcimage/${filePath}/ /body 案例删除服务器上的文件 /** * 从服务器上 删除文件 * param fileName 文件名 * return true: 从服务器上删除成功 false:否则失败 */ public boolean delFile(String fileName){ File filenew File(fileName); if(file.exists()){ return file.delete(); } return false; } 案例使用数组上传多个文件 action.java package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Random; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * author Administrator * */ public class ArrayUpload extends ActionSupport { private File[] image; private String[] imageContentType; private String[] imageFileName; private String path; public String getPath() { return ServletActionContext.getRequest().getRealPath(path); } public void setPath(String path) { this.path path; } Override public String execute() throws Exception { for(int i0;iimage.length;i){ imageFileName[i]getFileName(imageFileName[i]); String targetFileNamegetPath()\\imageFileName[i]; FileOutputStream fosnew FileOutputStream(targetFileName); FileInputStream fisnew FileInputStream(image[i]); byte[] bnew byte[1024]; int len0; while ((lenfis.read(b))0) { fos.write(b, 0, len); } } return SUCCESS; } private String getFileName(String fileName){ int positionfileName.lastIndexOf(.); String extensionfileName.substring(position); int radomnew Random().nextInt(1000); return System.currentTimeMillis()radomextension; } //get set } struts.xml action namearrayUpload classcom.sh.action.ArrayUpload interceptor-ref namefileUpload param nameallowedTypes image/x-png,image/gif,image/bmp,image/jpeg /param param namemaximumSize10240000/param /interceptor-ref interceptor-ref namedefaultStack/ param namepath/image/param result namesuccess/arraySuccess.jsp/result result nameinput/arrayupload.jsp/result /action arrayUpload.jsp body 多文件上传 form action${pageContext.request.contextPath }/arrayUpload.action enctypemultipart/form-data methodpost 文件1input typefile nameimage/br/ 文件2input typefile nameimage/br/ 文件3input typefile nameimage/ input typesubmit value上传/ /form /body arraySuccess.jsp body b使用数组上传成功s:iterator/b s:iterator valueimageFileName statusst 第s:property value#st.getIndex()1/个图片br/ [img]image/s:property valueimageFileName[#st.getIndex()][/img]/ /s:iterator br/b使用数组上传成功c:foreach/b c:forEach varfn items${imageFileName} varStatusst 第${st.index1}个图片:br/ img srcimage/${fn}/ /c:forEach /body 案例使用List上传多个文件 action.java package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.List; import java.util.Random; import javax.servlet.Servlet; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class ListUpload extends ActionSupport { private ListFile doc; private ListString docContentType; private ListString docFileName; private String path; Override public String execute() throws Exception { for(int i0;idoc.size();i){ docFileName.set(i, getFileName(docFileName.get(i))); FileOutputStream fosnew FileOutputStream(getPath()\\docFileName.get(i)); File filedoc.get(i); FileInputStream fisnew FileInputStream(file); byte [] bnew byte[1024]; int length0; while((lengthfis.read(b))0){ fos.write(b,0,length); } } return SUCCESS; } public String getFileName(String fileName){ int positionfileName.lastIndexOf(.); String extensionfileName.substring(position); int radomnew Random().nextInt(1000); return System.currentTimeMillis()radomextension; } public String getPath() { return ServletActionContext.getRequest().getRealPath(path); } strust.xml action namelistUpload classcom.sh.action.ListUpload interceptor-ref namefileUpload param nameallowedTypes image/x-png,image/gif,image/bmp,image/jpeg /param param namemaximumSize 10240000 /param /interceptor-ref interceptor-ref namedefaultStack/ param namepath/image/param result namesuccess/listSuccess.jsp/result result nameinput/listupload.jsp/result /action listUpload.jsp body List 多文件上传 form action${pageContext.request.contextPath }/listUpload.action enctypemultipart/form-data methodpost 文件1input typefile namedoc/br/ 文件2input typefile namedoc/br/ 文件3input typefile namedoc/ input typesubmit value上传/ /form s:fielderror/ s:form actionlistUpload enctypemultipart/form-data s:file namedoc label选择上传的文件/ s:file namedoc label选择上传的文件/ s:file namedoc label选择上传的文件/ s:submit value上传/ /s:form /body listSuccess.jsp body h3使用List上传多个文件 s:iterator显示/h3 s:iterator valuedocFileName statusst 第s:property value#st.getIndex()1/个图片 br/ img srcimage/s:property valuedocFileName.get(#st.getIndex())//br/ /s:iterator h3使用List上传多个文件 c:foreach显示/h3 c:forEach varfn items${docFileName} varStatusst 第${st.index}个图片br/ img srcimage/${fn}/ /c:forEach /body 案例Struts2 文件下载 Struts2支持文件下载通过提供的stram结果类型来实现。指定stream结果类型是还需要指定inputName参数此参数表示输入流作为文件下载入口。 简单文件下载 不含中文附件名 package com.sh.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class MyDownload extends ActionSupport { private String inputPath; //注意这的 方法名 在struts.xml中要使用到的 public InputStream getTargetFile() { System.out.println(inputPath); return ServletActionContext.getServletContext().getResourceAsStream(inputPath); } public void setInputPath(String inputPath) { this.inputPath inputPath; } Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } } Struts.xml action namemydownload classcom.sh.action.MyDownload !--给action中的属性赋初始值-- param nameinputPath/image/1347372060765110.jpg/param !--给注意放回后的 type类型-- result namesuccess typestream !--要下载文件的类型-- param namecontentTypeimage/jpeg/param !--action文件输入流的方法 getTargetFile()-- param nameinputNametargetFile/param !--文件下载的处理方式 包括内联(inline)和附件(attachment)两种方式--- param namecontentDispositionattachment;filename1347372060765110.jpg/param !---下载缓冲区的大小-- param namebufferSize2048/param /result /action down.jsp body h3Struts 2 的文件下载/h3 br a hrefmydownload.action我要下载/a /body 文件下载支持中文附件名 action package com.sh.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownLoadAction extends ActionSupport { private final String DOWNLOADPATH/image/; private String fileName; //这个方法 也得注意 struts.xml中也会用到 public InputStream getDownLoadFile(){ return ServletActionContext.getServletContext().getResourceAsStream(DOWNLOADPATHfileName); } //转换文件名的方法 在strust.xml中会用到 public String getDownLoadChineseFileName(){ String chineseFileNamefileName; try { chineseFileNamenew String(chineseFileName.getBytes(),ISO-8859-1); } catch (Exception e) { e.printStackTrace(); } return chineseFileName; } Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName fileName; } } struts.xml action namedownload classcom.sh.action.DownLoadAction param namefileName活动主题.jpg/param result namesuccess typestream param namecontentTypeimage/jpeg/param !-- getDownLoadFile() 这个方法--- param nameinputNamedownLoadFile/param param namecontentDispositionattachment;filename${downLoadChineseFileName}/param param namebufferSize2048/param /result /action down1.jsp body h3Struts 2 的文件下载/h3 br a hrefdownload.action我要下载/a /body