最近寫了個功能jqgrid的某個欄位下載文件,本來直接用<a href=""/>直接鏈接的,但是出現了文件名含中文的就報錯的現象,且若文件類型為.txt則直接打開。然后我糾結啊!
然后百度到網上有人使用struts2下載文件解決了這個問題,然后就借用了看看。
jquery代碼
struts.xml里的配置
后臺代碼
然后百度到網上有人使用struts2下載文件解決了這個問題,然后就借用了看看。
jquery代碼
1 function rangFun(value, options, rData){
2 return '<a href=entCom/download.action?filename='+rData['range_id']+'>'+rData['range_id']+'</a>';
3 }
4 $("#externalListGrd").jqGrid({
5 datatype : "json",
6 mtype : "POST",
7 width : 720 ,
8 height : 420,
9 rownumWidth : true,
10 shrinkToFit : false,
11 scroll : true,
12 ondblClickRow:regectExtFun,
13 colNames : ['允許范圍'],
14 colModel:[
15 { name : 'range_id', index : 'range_id', width : 50, align: "left",sortable : "true",formatter:rangFun}]
16 })
2 return '<a href=entCom/download.action?filename='+rData['range_id']+'>'+rData['range_id']+'</a>';
3 }
4 $("#externalListGrd").jqGrid({
5 datatype : "json",
6 mtype : "POST",
7 width : 720 ,
8 height : 420,
9 rownumWidth : true,
10 shrinkToFit : false,
11 scroll : true,
12 ondblClickRow:regectExtFun,
13 colNames : ['允許范圍'],
14 colModel:[
15 { name : 'range_id', index : 'range_id', width : 50, align: "left",sortable : "true",formatter:rangFun}]
16 })
struts.xml里的配置
1 <action name="download" class="com.ivo.action.DownloadAction">
2 <result name="success" type="stream">
3 <param name="contentType">text/html,application/vnd.ms-powerpoint,application/vnd.ms-word,application/vnd.ms-excel,text/plain</param> //文件打開方式
4 <param name="inputName">inputStream</param>
5 <param name="contentDisposition">attachment;filename="${filename}"</param>
6 <param name="bufferSize">2048</param>
7 </result>
8 </action>
2 <result name="success" type="stream">
3 <param name="contentType">text/html,application/vnd.ms-powerpoint,application/vnd.ms-word,application/vnd.ms-excel,text/plain</param> //文件打開方式
4 <param name="inputName">inputStream</param>
5 <param name="contentDisposition">attachment;filename="${filename}"</param>
6 <param name="bufferSize">2048</param>
7 </result>
8 </action>
后臺代碼
1 package com.ivo.action;
2
3 import java.io.FileInputStream;
4 import java.io.InputStream;
5 import java.io.UnsupportedEncodingException;
6
7 import com.opensymphony.xwork2.ActionSupport;
8
9 public class DownloadAction extends ActionSupport {
10 private String filename;
11 public InputStream getInputStream() throws Exception{
12 String downloadFileName=filename;
13 try {
14 // downloadFileName = new String(downloadFileName.getBytes(),"UTF-8");這樣帶中文名的文件依舊會報錯,想了半天找前輩幫忙看,后來改成下面的才OK。原因是從前臺傳過來的時候字符已經亂碼,所以需要重新解析,再轉換
15 downloadFileName = new String(downloadFileName.getBytes("ISO-8859-1"),"UTF-8");
16
17 } catch(UnsupportedEncodingException e) {
18
19 e.printStackTrace();
20
21 }
22 String dir = "D:\\qra\\fileUpload\\"+downloadFileName;
23 return new FileInputStream(dir);
24 }
25
26 public String getFilename() {
27 return filename;
28 }
29
30 public void setFilename(String filename) {
31 this.filename = filename;
32 }
33
34 }
2
3 import java.io.FileInputStream;
4 import java.io.InputStream;
5 import java.io.UnsupportedEncodingException;
6
7 import com.opensymphony.xwork2.ActionSupport;
8
9 public class DownloadAction extends ActionSupport {
10 private String filename;
11 public InputStream getInputStream() throws Exception{
12 String downloadFileName=filename;
13 try {
14 // downloadFileName = new String(downloadFileName.getBytes(),"UTF-8");這樣帶中文名的文件依舊會報錯,想了半天找前輩幫忙看,后來改成下面的才OK。原因是從前臺傳過來的時候字符已經亂碼,所以需要重新解析,再轉換
15 downloadFileName = new String(downloadFileName.getBytes("ISO-8859-1"),"UTF-8");
16
17 } catch(UnsupportedEncodingException e) {
18
19 e.printStackTrace();
20
21 }
22 String dir = "D:\\qra\\fileUpload\\"+downloadFileName;
23 return new FileInputStream(dir);
24 }
25
26 public String getFilename() {
27 return filename;
28 }
29
30 public void setFilename(String filename) {
31 this.filename = filename;
32 }
33
34 }