`
redfeather
  • 浏览: 31365 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

struts1.3 上传下载 文件名乱码

阅读更多

吸收了很多网上的方案,发现掺合起来才好使。。。。 

 

1. 上传 form传参 a要使用过滤器utf-8 b页面设置成utf-8 c 使用struts1.1以上版本

 

2. 下载 url传参,过滤器居然不好用。把tomcat server.xml URIEncode设成 utf-8传进来的参数终于不是乱码了。

 

但是下载时的名字还是乱码。又在网上查了好多方法 URLEncode 啥的都不好用

 

 

开始设成 String name = new String(uForm.getFileName().getBytes("utf-8"),

"ISO8859_1"); 

firefox下载的名字终于对了,ie还是乱码....

 

最后设成 String name = new String(uForm.getFileName().getBytes(""),

"ISO8859_1");

 

最后是这个写的终于通过了 下载时都是正确的中文名字了。

 

贴代码吧~ 没有用到spring action 继承struts的就好了 没必要继承 ActionSupport

 

struts-config.xml

 

<!-- upload -->
		<action attribute="uploadForm" name="uploadForm" path="/upload/upload"
			scope="request"
			type="com.travelsky.fgos.web.presentation.actions.upload.UploadAction">
			<forward name="success" path="/upload/upload.jsp" />
			<forward name="failure" path="/upload/fileList.jsp" />
		</action>
		<action attribute="uploadForm" name="uploadForm" path="/upload/list"
			scope="request"
			type="com.travelsky.fgos.web.presentation.actions.upload.ListAction">
			<forward name="success" path="/upload/fileList.jsp" />
			<forward name="failure" path="/upload/fileList.jsp" />
		</action>
		<action attribute="uploadForm" name="uploadForm" path="/upload/download"
			scope="request"
			type="com.travelsky.fgos.web.presentation.actions.upload.DownloadAction">
			<forward name="success" path="/upload/fileList.jsp" />
			<forward name="failure" path="/upload/fileList.jsp" />
		</action>
		<action attribute="uploadForm" name="uploadForm" path="/upload/delete"
			scope="request"
			type="com.travelsky.fgos.web.presentation.actions.upload.DeleteAction">
			<forward name="success" path="/upload/fileList.jsp" />
			<forward name="failure" path="/upload/fileList.jsp" />
		</action>
		<!-- upload -->

 

upload.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"  prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html:html>
	<head>
		<meta http-equiv="Content-Type" content="text/html;utf-8" />
		<meta http-equiv="pragma" content="no-cache" />
		<meta http-equiv="cache-control" content="no-cache" />
		<meta http-equiv="cache-control" content="no-store" />
		<meta http-equiv="expires" content="0" />
		
		<link rel="stylesheet" type="text/css" href="../css/upload.css" />
		<script type="text/javascript" src="../js/upload.js"></script>
		<script type="text/javascript" src="../js/net.js"></script>
		<title>文件管理</title>
	</head>
	<body onload="listFile()">
		<div id="title"><h3>文件管理</h3></div>
		<div id="fileUploadDiv">
			<html:form action="upload/upload" method="post" enctype="multipart/form-data">
				<br />
				选择文件:<html:file property="file" /><html:submit value="上传文件"/>
				请输入文件名:<html:text property="fileName"></html:text>(不输入默认使用上传文件名)			
				<iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe>
			</html:form>
		</div>
		<br/>
		<div id="fileListDiv">

		</div>	
	</body>
</html:html>

 

filelist.jsp

 

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
	
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<table>
	<tr class="title">
		<td>
			编号
		</td>
		<td>
			文件名
		</td>
		<td>
			上传日期
		</td>
		<td>
			大小(KB)
		</td>
		<td>
			操作1
		</td>
		<td>
			操作2
		</td>
	</tr>
	<c:forEach var="item" items="${fileInfoList}" varStatus="status">
		<tr <c:if test="${status.count%2 == 0}">class="oddLine"</c:if>
			<c:if test="${status.count%2 == 1}">class="evenLine"</c:if>>
			<td class="mid">
				<c:out value="${status.count}"></c:out>
			</td>
			<td class="content">
				<c:out value="${item[0]}"></c:out>
			</td>
			<td class="mid">
				<c:out value="${item[1]}"></c:out>
			</td>
			<td class="mid">
				<c:out value="${item[2]}"></c:out>
			</td>
			<td class="mid">
				<html:button property="btn" styleId="" onclick="deleteFile('${item[0]}')">下载</html:button>
			</td>
			<td class="mid">
				<html:button property="btn" onclick="download('${item[0]}')">下载</html:button>
				<%//<html:link href="download.do?fileName=${item[0]}">下载</html:link>%>
			</td>
		</tr>
	</c:forEach>
</table>

 

upload.js

 

function callback(){

}

function $(id) {
	return document.getElementById(id)
	//return "string" == typeof id ? document.getElementById(id) : id;
}

function listFile(){
	var url = "/fgosweb/upload/list.do";
	var params = ""	
	var loader = new net.ContentLoader(url, showData, null, "POST",
		params);
	
}

function showData() {
	var text = this.req.responseText;	
	
	//alert(text)
	if($("fileListDiv")){
		$('fileListDiv').innerHTML = text;
	}	
}

function download(fileName){
	var url = "/fgosweb/upload/download.do";
	var params = "?fileName=" + fileName;	
	window.location = url + params;
	//window.open("/fgosweb/upload/download.do" + params);
}

function deleteFile(fileName){
	var url = "/fgosweb/upload/delete.do";
	var params = "?fileName=" + fileName;	
	window.location = url + params;
}

 

net.js

 

/*
url-loading object and a request queue built on top of it* 
* */

/* namespacing object */
var net=new Object();

net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;
net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;


/*--- content loader object for cross-browser requests ---*/
net.ContentLoader=function(url,onload,onerror,method,params,contentType){
  this.req=null;
  this.onload=onload;
  this.onerror=(onerror) ? onerror : this.defaultError;
  this.loadXMLDoc(url,method,params,contentType);
}

net.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){
  if (!method){
    method="GET";
  }
  if (!contentType && method=="POST"){
    contentType='application/x-www-form-urlencoded';
  }
  if (window.XMLHttpRequest){
    this.req=new XMLHttpRequest();//ff
  } else if (window.ActiveXObject){
    this.req=new ActiveXObject("Microsoft.XMLHTTP");//ie
  }
  if (this.req){
    try{
      var loader=this;
      this.req.onreadystatechange=function(){
        net.ContentLoader.onReadyState.call(loader);
      }
      this.req.open(method,url,true);
      if (contentType){
        this.req.setRequestHeader('Content-Type', contentType);
      }
      this.req.send(params);
    }catch (err){
      this.onerror.call(this);
    }
  }
}


net.ContentLoader.onReadyState=function(){
  var req=this.req;
  var ready=req.readyState;
  if (ready==net.READY_STATE_COMPLETE){
    var httpStatus=req.status;
    if (httpStatus==200 || httpStatus==0){
      this.onload.call(this);
    }else{
      this.onerror.call(this);
    }
  }
}

net.ContentLoader.prototype.defaultError=function(){
  alert("error fetching data!"
    +"\n\nreadyState:"+this.req.readyState
    +"\nstatus: "+this.req.status
    +"\nheaders: "+this.req.getAllResponseHeaders());
}

 

server.xml

 

  <Connector
port="8011"               maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>

  

 

 uploadAciton.java

package com.travelsky.fgos.web.presentation.actions.upload;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import org.springframework.web.struts.ActionSupport;
import com.travelsky.fgos.web.presentation.forms.upload.UploadForm;

public class UploadAction extends ActionSupport {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		Log logger = LogFactory.getLog(UploadAction.class);
		UploadForm uploadform = (UploadForm) form;
		String path = request.getSession().getServletContext().getRealPath(
				"/file/");
		FormFile file = null;
		try {
			file = uploadform.getFile();// 获取FormFile
		} catch (Exception e) {
			logger.debug(e);
		}

		File dir = new File(path);
		if (!dir.exists())
			dir.mkdirs();
		if (file != null) {
			try {
				FileOutputStream fos;
				if (uploadform.getFileName() == null
						|| uploadform.getFileName().equals("")) {
					fos = new FileOutputStream(dir + "/" + file.getFileName());
				} else {
					String suffix = file.getFileName().substring(
							file.getFileName().lastIndexOf("."));
					fos = new FileOutputStream(dir + "/"
							+ uploadform.getFileName() + suffix);
				}
				fos.write(file.getFileData());// 开始写入
				fos.flush();
				fos.close();

			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return mapping.findForward("failure");
			} catch (IOException e) {
				// 获取文件流对象
				e.printStackTrace();
				return mapping.findForward("failure");
			}

		}
		// response.write("<script
		// type='text/javascript'>parent.callback('ok')</script>");
		return mapping.findForward("success");

	}
}

 

 

downlaodAction.java

 

package com.travelsky.fgos.web.presentation.actions.upload;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.web.struts.ActionSupport;

import com.travelsky.fgos.web.presentation.forms.upload.UploadForm;

public class DownloadAction extends ActionSupport {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		Log logger = LogFactory.getLog(DownloadAction.class);
		String path = request.getSession().getServletContext().getRealPath(
				"/file/");
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		OutputStream fos = null;
		InputStream fis = null;
		try {
			UploadForm uForm = (UploadForm) form;
			String fileName = path + "\\" + uForm.getFileName();
			String name = new String(uForm.getFileName().getBytes(),
					"ISO8859_1");
			File downloadFile = new File(fileName);
			fis = new FileInputStream(downloadFile);
			bis = new BufferedInputStream(fis);
			fos = response.getOutputStream();
			bos = new BufferedOutputStream(fos);
			//弹出下载对话框的关键代码
			response.setContentType("application/x-msdownload");
			response.setHeader("Content-disposition", "attachment;filename="
					+ name);
			int bytesRead = 0;
			//用输入流进行先读,然后用输出流去写(缓冲输入输出流)
			byte[] buffer = new byte[8192];
			while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
				bos.write(buffer, 0, bytesRead);
			}
			bos.flush();
			fis.close();
			bis.close();
			fos.close();
			bos.close();
		} catch (Exception e) {
			logger.debug(e);
			return mapping.findForward("failure");
		}

		return null;
	}

}

 

listAction.java

 

package com.travelsky.fgos.web.presentation.actions.upload;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.web.struts.ActionSupport;

public class ListAction extends ActionSupport {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response){
				
		String path = request.getSession().getServletContext().getRealPath("/file/");
		try{
			//getFileInfo(path);
			request.setAttribute("fileInfoList", getFileInfo(path));
		}catch(Exception e){
			return mapping.findForward("failure");
		}	
		return mapping.findForward("success");
		
		
	}
	public static List getFileInfo(String path){
		
		File file = new File(path);   
		File[] array = file.listFiles();
		
		List fileInfoList = new ArrayList();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		for(int i=0;i<array.length;i++){   
			List fileInfoItem = new ArrayList();
	        if(array[i].isFile()){   	        	
	            fileInfoItem.add(array[i].getName());  //0:name
	            Date d = new Date(array[i].lastModified());
	            fileInfoItem.add(sdf.format(d));//1:time
	            fileInfoItem.add(new Long(array[i].length()/1024));//2:length
	            //fileInfoItem.add(array[i].getPath());//3:path
	        }
	        fileInfoList.add(fileInfoItem);
	        } 
		System.out.print(fileInfoList);
		return fileInfoList;
	}
}

 

 

 

 

分享到:
评论

相关推荐

    struts1.3.jar

    Struts 1.3 是一个历史悠久的Java Web应用程序框架,由Apache软件基金会开发。这个"struts1.3.jar"文件是Struts 1.3版本的核心库,它集成了框架的各种组件,使得开发者能够构建基于Model-View-Controller (MVC)设计...

    struts1.3用户指南

    Struts1.3是Apache软件基金会的Jakarta项目下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架提供了一种结构化的应用开发方式,它将业务逻辑、控制流程和表现层进行了分离,使得开发过程更为高效且...

    struts1.3 入门级例子

    Struts1.3 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它由Apache软件基金会开发并维护。这个入门级例子旨在帮助新手了解如何在实际项目中应用Struts1.3的核心概念和技术。在这个例子中,我们...

    struts1.3 jar包

    Struts1.3 jar包是Apache软件基金会的Jakarta Struts项目中的一个核心组件,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。这个框架极大地简化了开发人员在构建动态、数据驱动的Web应用程序...

    struts1.3+spring3.0+hibernate3.3简单项目示例

    Struts1.3、Spring3.0和Hibernate3.3是经典的Java企业级开发框架组合,常被用于构建Web应用程序。这个"SSH"项目示例旨在帮助开发者理解如何将这三个框架整合并应用于实际项目中。下面我们将深入探讨这三个组件以及...

    welogic struts2文件下载中文件名乱码:在tomcat中是好的哦

    本文将深入探讨在WeLogic服务器中使用Struts2框架进行文件下载时遇到的文件名乱码问题,并提供详细的解决方案。 ### 文件名乱码现象分析 在WeLogic服务器中使用Struts2进行文件下载时,用户可能会遇到文件名显示为...

    Struts1.3+Spring4.x+Hibernate4.x框架整合实现对书籍的增删改查(含分页)

    Struts1.3、Spring4.x和Hibernate4.x是经典的Java Web开发框架组合,被称为SSH。这个项目展示了如何将这三个框架整合起来,实现一个完整的书籍管理应用,包括书籍的增加、删除、修改和查询功能,并且包含了分页展示...

    struts是1.3API

    Struts 1.3 API 是一个用于构建基于Java的企业级Web应用程序的重要框架。这个API文档是开发者学习和理解Struts框架核心功能的关键资源,虽然它提供了英文版本,但其丰富的信息对于深入理解Struts的工作原理至关重要...

    Struts1.3API

    Struts1.3 API 是一个基于Java的开源框架,用于构建企业级的Web应用程序。它遵循Model-View-Controller (MVC) 设计模式,帮助开发者有效地管理应用程序的业务逻辑、用户界面和数据处理。Struts1.3是Struts框架的一个...

    struts1.3jar包

    struts1.3jar包

    Struts1.3+2.0+Hibernate3.1+Spring3.1全套API及教程

    内含Struts1.3 API、Struts2.0 API、Struts1.3标签、Hibernate3.1教程、Hibernate3.1API、Spring3.0 API、Spring3.1API。SSH应有尽有,API均是CHM格式,方便使用。教程为pdf格式。

    struts1.3实现的Validator简单验证

    Struts1.3是Apache Struts框架的一个版本,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序开发框架。Validator是Struts框架中的一个关键组件,用于处理用户输入验证,确保数据的有效性和一致...

    学习Struts1.3的相关jar包和API

    Struts1.3是Apache软件基金会的Jakarta项目下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架提供了一种结构化的应用开发方式,它将业务逻辑、控制流程和表现层进行了分离,使得开发过程更为高效且...

    Struts1.3全部架包

    Struts1.3的全部架包,非常全,包含:struts-core-1.3.10.jar,struts-tiles-1.3.10.jar,struts-taglib-1.3.10.jar,struts-faces-1.3.10.jar,struts-extras-1.3.10.jar........

    Ibatis2.3+Struts1.3+Spring2.5 整合实例代码

    本示例代码涉及的是一个经典的技术栈:Ibatis2.3、Struts1.3和Spring2.5的整合。这三个框架各自都有其独特的功能和优点,组合在一起能够提供灵活的数据访问、高效的MVC架构以及全面的应用管理。 Ibatis,作为一款轻...

    Struts1.3+hibernate+Spring3

    Struts1.3+hibernate+Spring3Struts1.3+hibernate+Spring3Struts1.3+hibernate+Spring3Struts1.3+hibernate+Spring3Struts1.3+hibernate+Spring3Struts1.3+hibernate+Spring3Struts1.3+hibernate+Spring3Struts1.3+...

    配置 struts1.3

    Struts 1.3 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,由Apache软件基金会开发并维护。这个框架为开发者提供了一种组织和控制Web应用程序的方式,使得代码更加结构化,易于维护。在本文中,...

    taglib(struts1.3)源码

    4. 文件上传与下载:Struts1.3还提供了处理文件上传和下载的标签,如`&lt;html:file&gt;`和`&lt;bean:write&gt;`。这些标签帮助开发者在JSP页面上处理二进制文件,实现了用户界面与后台服务的交互。 5. 源码学习价值:通过阅读...

    Struts1.3 api函数

    Struts1.3 API函数是Java Web开发中用于构建Model-View-Controller(MVC)架构的应用框架Apache Struts的核心组成部分。Struts1.3版本是该框架的一个稳定且广泛使用的迭代,它提供了丰富的功能来帮助开发者管理应用...

Global site tag (gtag.js) - Google Analytics