Struts2下载问题,高手请进 100
我现在做一个下载,只下载pdf文档,java代码如下:publicclassFileDownloadActionimplementsAction{privateStrin...
我现在做一个下载,只下载pdf文档,java代码如下:
public class FileDownloadAction implements Action {
private String fileName;// 初始的通过param指定的文件名属性
public InputStream getInputStream() throws Exception {
// 通过 ServletContext,也就是application 来读取数据
return ServletActionContext.getServletContext().getResourceAsStream(
"/download/" + fileName.trim());
}
public String execute() throws Exception {
System.out.println("fileName=" + fileName.trim());
return SUCCESS;
}
/**
* 解码方法
*/
public void setFileName(String fileName) {
// 得到请求下载的文件名
String fname = fileName.trim()+".pdf";
try {
/*
* 对fname参数进行UTF-8解码,注意:实际进行UTF-8解码时会使用本地编码,本机为GBK。
* 这里使用request.setCharacterEncoding解码无效.
* 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
*/
fname = new String(fname.getBytes("ISO-8859-1"), "gb2312");
} catch (Exception e) {
e.printStackTrace();
}
this.fileName = fname ;
}
/** 提供转换编码后的供下载用的文件名 */
public String getFileName() {
try {
fileName = new String(fileName.getBytes("GBK"),"gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}
struts2配置文件如下:
<package name="file" namespace="/fileDownload" extends="struts-default">
<!-- 配置下载的拦截器引用 -->
<default-action-ref name="download"></default-action-ref>
<!-- 下载现有文件 -->
<action name="downloadFile" class="fileDownloadAction">
<!-- 初始文件名 -->
<result name="success" 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="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
</package>
问题是如果在页面传递一个英文名称或者数字,能够进行下载,但是如果传递中文就不行,重点是下载之后页面端原来是“gb2312”的字符编码显示的文字,变成了不是这种编码的文字,也就是字变大了,也很不好看,怎么样能够让字符编码不变。还有 现在我传递英文名称到后台下载,下载框也弹出来了,但是此时如果我点击取消,会抛出严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:752)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)这种异常,请高手指教,所有代码都粘在上面了,当然前台还有个下载超链接。 展开
public class FileDownloadAction implements Action {
private String fileName;// 初始的通过param指定的文件名属性
public InputStream getInputStream() throws Exception {
// 通过 ServletContext,也就是application 来读取数据
return ServletActionContext.getServletContext().getResourceAsStream(
"/download/" + fileName.trim());
}
public String execute() throws Exception {
System.out.println("fileName=" + fileName.trim());
return SUCCESS;
}
/**
* 解码方法
*/
public void setFileName(String fileName) {
// 得到请求下载的文件名
String fname = fileName.trim()+".pdf";
try {
/*
* 对fname参数进行UTF-8解码,注意:实际进行UTF-8解码时会使用本地编码,本机为GBK。
* 这里使用request.setCharacterEncoding解码无效.
* 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
*/
fname = new String(fname.getBytes("ISO-8859-1"), "gb2312");
} catch (Exception e) {
e.printStackTrace();
}
this.fileName = fname ;
}
/** 提供转换编码后的供下载用的文件名 */
public String getFileName() {
try {
fileName = new String(fileName.getBytes("GBK"),"gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}
struts2配置文件如下:
<package name="file" namespace="/fileDownload" extends="struts-default">
<!-- 配置下载的拦截器引用 -->
<default-action-ref name="download"></default-action-ref>
<!-- 下载现有文件 -->
<action name="downloadFile" class="fileDownloadAction">
<!-- 初始文件名 -->
<result name="success" 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="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
</package>
问题是如果在页面传递一个英文名称或者数字,能够进行下载,但是如果传递中文就不行,重点是下载之后页面端原来是“gb2312”的字符编码显示的文字,变成了不是这种编码的文字,也就是字变大了,也很不好看,怎么样能够让字符编码不变。还有 现在我传递英文名称到后台下载,下载框也弹出来了,但是此时如果我点击取消,会抛出严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:752)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)这种异常,请高手指教,所有代码都粘在上面了,当然前台还有个下载超链接。 展开
5个回答
展开全部
public String getFileName() {
try {
fileName = new String(fileName.getBytes("GBK"),"gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}改为
public String getFileName() {
try {
fileName=new String(fileName.getBytes(),"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}
这样你试一试。。。
try {
fileName = new String(fileName.getBytes("GBK"),"gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}改为
public String getFileName() {
try {
fileName=new String(fileName.getBytes(),"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}
这样你试一试。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
AiPPT
2024-09-19 广告
2024-09-19 广告
AiPPT软件是一款由北京饼干科技有限公司开发的智能PPT生成工具,用户可通过官方渠道下载。该软件基于人工智能大模型和自然语言处理技术,支持一键生成高质量PPT,提供丰富的模板和素材选择,满足不同场景需求。用户只需输入主题或文档资料,即可快...
点击进入详情页
本回答由AiPPT提供
展开全部
/**
* 获取动态文件名,以及中文名
*/
public String getDownloadFileName(){
try{
downloadFileName=new String(uploadFileName.getByte(),”ISO8859-1”);
return downloadFileName;
}catch(UnsupportedEncodingException e){
e.printStackTrace();
return null;
}
}
写这样一个方法,DownloadFileName是你要下载文件的文件对象downloadFileName,把这个方法放在action中就行~
* 获取动态文件名,以及中文名
*/
public String getDownloadFileName(){
try{
downloadFileName=new String(uploadFileName.getByte(),”ISO8859-1”);
return downloadFileName;
}catch(UnsupportedEncodingException e){
e.printStackTrace();
return null;
}
}
写这样一个方法,DownloadFileName是你要下载文件的文件对象downloadFileName,把这个方法放在action中就行~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
捕捉并处理这个异常:java.lang.IllegalStateException
另外,我怎么不知道下载还能把下载框里的字体改掉?
另外,我怎么不知道下载还能把下载框里的字体改掉?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种错误老子做毕业设计的时候困扰我了2个星期
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同求!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询