struts2文件上传 下载
来源:互联网 发布:跨境电子商城源码 编辑:程序博客网 时间:2024/06/11 23:31
多文件上传的要求
1:完成文件上传
1:将上传的文件统一放置到upload的文件夹下
2:将每天上传的文件,使用日期格式的文件夹分开,将每个业务的模块放置统一文件夹下
3:上传的文件名要指定唯一,可以使用UUID的方式,也可以使用日期作为文件名
4:封装一个文件上传的方法,该方法可以支持多文件的上传,即支持各种格式文件的上传
5:保存路径path的时候,使用相对路径进行保存,这样便于项目的可移植性
第一步:在util包下封装一个方法:
public static String fileUploadReturnPath(File upload, String uploadFileName,String model) {//获取upload的文件夹String basepath = ServletActionContext.getServletContext().getRealPath("/upload");//指定日期格式的文件夹(yyyy/MM/dd)String datepath = DateUtils.dateToString(new Date());//文件后缀String perfix = uploadFileName.substring(uploadFileName.lastIndexOf("."));//文件名(格式:ADFSDFSDFA@#$@#$@DSDFS12321.doc)String filename = UUID.randomUUID().toString()+perfix;//判断当前日期文件夹是否存在,如果不存在,创建一个日期的文件夹String modelPath = basepath+datepath+model;File dateFile = new File(modelPath);if(!dateFile.exists()){dateFile.mkdirs();}//目标文件File destFile = new File(modelPath+"/"+filename);//文件上传upload.renameTo(destFile);//返回相对路径return "/upload"+ datepath+model+"/"+filename;}public static void main(String[] args) throws Exception {//文件上传//方案一:(复制,粘贴)//源文件File srcFile = new File("F:\\dir\\a.txt");//目标文件File destFile = new File("F:\\dir\\dir2xxxxxxxxxxx\\a.txt");//FileUtils.copyFile(srcFile, destFile);//方案二:(剪切)boolean flag = srcFile.renameTo(destFile);System.out.println(flag);}
第二步:jsp页面的表单要求:
并且表单提交:
<form name="Form1"action="${pageContext.request.contextPath }/xxx/xxx.do" method="post" enctype="multipart/form-data"><s:file name="upload" id="upload" cssStyle="width:450px;"></s:file> *</form>
第三步:文件上传的要求:
在action中定义 或者 在模型驱动(javaBean)定义下面的属性
//获取文件类型的uploadprivate File [] upload;//文件类型private String [] uploadContentType;//文件名private String [] uploadFileName;
其中upload表示页面提交的文件:
uploadContentType表示获取上传文件的类型
uploadFileName表示获取上传文件的名称
注意:如果是单文件上传,就是File类型的对象
如果是多文件上传,就是File类型的数组对象
public void saveFileUpload(ElecFileUpload elecFileUpload) {//获取当前时间,转换成String类型String progressTime = DateUtils.dateToString(new Date());// 1:文件上传//获取上传文件的数组File [] uploads = elecFileUpload.getUploads();//获取上传文件的文件名String [] uploadsFileNames = elecFileUpload.getUploadsFileName();//获取上传文件的描述String [] comments = elecFileUpload.getComments();//遍历循环组织PO对象,完成保存if(uploads!=null && uploads.length>0){for(int i=0;i<uploads.length;i++){//组织PO对象ElecFileUpload fileUpload = new ElecFileUpload();fileUpload.setProgressTime(progressTime);//当前时间fileUpload.setFileName(uploadsFileNames[i]);//上传的文件名//文件上传的同时,返回路径pathString fileUrl = FileUtils.fileUploadReturnPath(uploads[i], uploadsFileNames[i], "资料图纸管理");fileUpload.setFileUrl(fileUrl);//上传的路径fileUpload.setComment(comments[i]);//上传文件的描述//执行保存elecFileUploadDao.save(fileUpload);}}}
文件下载
(1)不使用struts2提供的文件下载
public String download() throws Exception{//1:获取用户附件ID,查询用户附件对象,获取路径pathString id = elecUser.getFileID();ElecUserFile elecUserFile = elecUserService.findElecUserFileByID(id);//路径pathString path = elecUserFile.getFileURL();//下载时,使用的文件名String name = elecUserFile.getFileName();//处理中文问题,或者使用:name = URLEncoder.encode(name, "UTF-8");name = new String(name.getBytes("gbk"),"iso-8859-1");//2:使用response对象设置文件下载的信息(头部信息,文件类型…)response.setHeader("Content-disposition", "attachment;filename="+name+"");response.setBufferSize(1024);//3:使用InputStream输入流读到path路径下对应文件,将InputStream的输入流写到输出流(response对象中获取)中InputStream in = new FileInputStream(new File(ServletActionContext.getServletContext().getRealPath("")+path));OutputStream out = response.getOutputStream();for(int b=-1;(b=in.read())!=-1;){out.write(b);}out.close();in.close();return null;}
(2)使用struts2提供的文件下载
第一步:配置struts.xml
<result name="download" type="stream"><!-- <param name="contentType">image/jpeg</param> --> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${#request.filename}"</param> <param name="bufferSize">1024</param></result>
第二步:在模型驱动的对象中,添加InputStream类型的属性,或者在action中添加属性InputStream 用来存放文件的输入流
其中属性名称要与struts.xml中定义的inputName的值一致。
//文件下载的流的属性private InputStream inputStream;public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}
第三步:将查询的文件输入流放置到模型驱动定义的inputStream属性中,用来输出文件。
第四步:Action类中代码:
public String download(){try {//获取文件IDString fileID = elecUser.getFileID();//1:使用文件ID,查询用户文件表,获取到路径pathElecUserFile elecUserFile = elecUserService.findUserFileByID(fileID);//路径pathString path = ServletActionContext.getServletContext().getRealPath("")+elecUserFile.getFileURL();//文件名称String filename = elecUserFile.getFileName();//可以出现中文filename = new String(filename.getBytes("gbk"),"iso8859-1");request.setAttribute("filename", filename);//2:使用路径path,查找到对应的文件,转化成InputStreamInputStream in = new FileInputStream(new File(path));//与栈顶的InputStream关联elecUser.setInputStream(in);} catch (Exception e) {e.printStackTrace();}return "download";}
0 0
- struts2文件上传 下载
- Struts2 文件上传 下载
- Struts2文件上传与下载
- Struts2文件上传和下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- Struts2文件上传与下载
- struts2文件上传和下载
- Struts2通用文件上传、下载
- struts2文件上传和下载
- Struts2 文件上传与下载
- struts2文件上传与下载
- Struts2文件上传与下载
- struts2 文件上传和下载
- Struts2 文件上传,下载,删除
- struts2文件上传和下载
- Struts2文件上传和下载
- struts2上传和下载文件
- C++标准库的异常类层次结构
- 蓝桥杯第三届 转方阵
- 操练Ubuntu14.10
- popToRootViewController
- 【HDU1863】畅通工程 (kruskal/并查集find)
- struts2文件上传 下载
- PAT 乙级 真题 1002. 写出这个数
- 【bzoj1982】【Spoj2021】【Moving Pebbles】【博弈论】
- 经典排序算法(2) -插入排序 InsertSort
- c++中的前向声明
- HDOJ 1016 Prime Ring Problem素数环【深搜】
- HDU 1452 Happy 2004
- 获取栈中最小值函数,时间复杂度为O(1)
- 详解 CSS 属性 - :before && :after