struts2 下载与上传 完美解决中文乱码
?
<!-- 确认 候选人基本信息 -->
<action name="hxrBaseInfo_*" class="hxrBaseInfoAction" method="{1}">
??? <result name="down" type="stream">
?????? <param name="contentType">
application/octet-stream;charset=ISO8859-1</param>
?????? <param name="inputName">inputStream</param>
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性?
对应action类中的方法 getDownloadFileName() -->
??????? <param name="contentDisposition">
attachment;filename="${downloadFileName}"
</param>
???????? <param name="bufferSize">5120</param>
??? </result>
public class HxrBaseInfoAction
………………
//导出下载使用
??? private String fileName;? //下载文件名
??? /**
??? ?* 下载方法
??? ?* @return
??? ?* @throws Exception
??? ?*/
??? public String exportZip() throws Exception {
?????? return "down";
?????? //1、调用 getInputStream()? 在Stream中给文件
?????? //2、调用getDownloadFileName 取得下载名 解决了中文乱码
?????? //如果是前台传过来的中文乱码,还要在
??? public InputStream getInputStream() {
?????? try {
?????????? this.setFileName(可以给定“中文名”);
?????????? this.inputStream = new FileInputStream(this.fileName);
?????? } catch (FileNotFoundException e) {
?????????? // TODO Auto-generated catch block
?????????? e.printStackTrace();
?????? }
?????? return this.inputStream;
??? }
?
??? public void setInputStream(InputStream inputStream)………………
??? /**
??? ?* 指定下载文件名称? 解决了中文乱码? 可见配置文件中对应${downloadFileName}
??? ?* @return
??? ?*/
??? public String getDownloadFileName(){
?????? String fn ="";
?????? try {
?????????? String temp = this.getFileName().………………;
?????????? fn = new String(temp.getBytes(), "ISO8859-1");
?????? } catch (UnsupportedEncodingException e) {
?????????? e.printStackTrace();
?????? }
?????? return fn;
public void setFileName(String fileName) {
?????? try {
?????????? this.fileName = URLDecoder.decode(fileName, "utf-8");
?????? } catch (UnsupportedEncodingException e) {
?????????? // TODO Auto-generated catch block
?????????? e.printStackTrace();
?????? }
var url = $.url.encode("候选人授权书-太和鼎信");? //解决中文件名乱码
window.open("downloadOrUpload_down.action?fileName="+$.url.encode(url)+".pdf","_self");
?
?
?二、上传
1、action
???? //文件上传
??? private File uploadFile;//得到上传的文件
??? private String uploadFileContentType;//得到文件的类型
??? private String uploadFileFileName;//得到文件的名称
?
getter setter 省略
?
/***
??? ?* 接收上传文件
??? ?* @return
??? ?* @throws Exception
??? ?*/
??? public String upload() throws Exception {
??? ??? try {
??? ??? ??? //String realpath = ServletActionContext.getServletContext().getRealPath("/downloadFiles/upload");
??? ??? ??? String realpath = (String) Constant.getValue("hxr.baseInfo.upFiles");
??? ??? ??? File file = new File(realpath);
??? ??? ??? if(!file.exists()) file.mkdirs();
??? ??? ??? //取得扩展名
??? ??? ??? String fileExtName = uploadFileFileName.substring(uploadFileFileName.indexOf(".")+1);
??? ??? ??? //生成新的文件名
??? ??? ??? String newFileName = UUID.randomUUID().toString()+"."+fileExtName;
??? ??? ??? FileUtils.copyFile(uploadFile, new File(file, newFileName));
??? ??? ??? //生成缩略图?? 支持生成//bmp,jpg,rar,doc,pdf,zip,tif
??? ??? ??? String filterStr = "bmp,jpg,tif";
??? ??? ??? String littleImgRelePath = ServletActionContext.getServletContext().getRealPath("/downloadFiles/littleImg");
??? ??? ??? String littleImgPath = "";? //小图路径
??? ??? ??? if(filterStr.indexOf(fileExtName)>-1) {
??? ??? ??? ??? // TODO 调用? 高立收? 方法生成? 小图
??? ??? ??? ??? ScaleImage.saveImageAsJpg(realpath+newFileName, littleImgRelePath+"/"+newFileName, 440, 400);
??? ??? ??? ??? //ScaleImage.saveImageAsJpg(realpath+"lilteImage/",);
??? ??? ??? ??? littleImgPath = "downloadFiles/littleImg/"+ newFileName;
??? ??? ??? }
??? ??? ??? // session中注册 文件
??? ??? ??? Map<String, Boolean> fileMap = (Map<String, Boolean>) this.getRequest().getSession().getAttribute("fliesMap");
??? ??? ??? fileMap.put(realpath+newFileName, false); //原图注册
??? ??? ??? fileMap.put(littleImgRelePath+"/"+newFileName, false);? //缩略图注册
??? ??? ??? if(!"".equals(littleImgPath)) fileMap.put(littleImgPath, false);
??? ??? ??? this.returnString("{success:true,filePath:'"+realpath+newFileName+"',fileName:'"+uploadFileFileName+"',littleImgPath:'"+littleImgPath+"'}", "UTF-8");
??? ??? } catch (Exception e) {
??? ??? ??? e.printStackTrace();
??? ??? ??? this.returnString("{success:false}", "UTF-8");
??? ??? }
????? ??? return null;
??? }
?
?
?
?