文件上传的流程
- form表单,提交方式为post, 添加属性encType=”multipart/form-data”
添加文件域在Action定义属性:File file;//用来接收文件,
String fileFileName;//接收老文件名,规定声明 :文件名+FileName
生成相应的方法get/set方法 - 生成uuid,String uuid=UUID.randomUUID().toString(); //保证新文件名不重复
- uuid拼接老文件名后缀生成新文件名,
String newFileName=uuid+fileFileName.subString(fileFileName.lastIndex(“.”)); - 将新文件名和老文件名存入数据库
- 获取tomcat路径,并加上文件夹的名字upload
String path=ServletActionContext.getServletContext().getRealPath(“\upload”); - 利用FileUtils工具类,将文件写到目标路径
FileUtils.copyFile(file,new File(path+”\”+newFileName));
文件下载的流程
- 用户点击下载,跳转到下载的Action参数为id,(如果表单中数据包含隐藏的老文件名和新文件名可以直接将对象传过来,就不用根据id查询数据库)
- 在Action中声名属性InputStream inputStream;//(规定声明)用来接收流;老文件名 String oname;并生成get/set方法
- 根据id查询数据库,获得老文件名和新文件名,
- 根据新文件名并获得tomcat的安装路径+upload文件夹,获取得到文件的绝对路径
- 创建流赋给inputStream,inputStream=new FileInputStream(“绝对路径”);
- 在struts.xml进行配置,标签
<result name=”” type=”stream”> //stream 表示以流的形式 <param name=”contextDispostion”>attachment;filename=${oname}</param> </result>
- contextDispostion:表示下载的具体信息
- attachment:表示以附件的形式下载
- filename=oname:表示下载的时候显示的文件名;{oname} :表示下载的时候显示的文件名;oname:表示下载的时候显示的文件名;{}//获取Action中属性值
如何解决下载时文件名乱码问题
在要显示的老文件名的get方法中添加:
老文件名=new String(老文件名.getBytes(“UTF-8”,”ISO-8859-1”));