亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

下載 中文名稱的文件 struts報錯

<a?href="download.action?filename=123圖片.jpg">文件下載</a>

<action?name="download"?class="com.pactera.action.FileDownloadAction">
<!--?				<param?name="inputPath">/</param>?-->
				<result?name="success"?type="stream">
					<param?name="contentType">application/octet-stream</param>
					<param?name="inputName">inputStream</param>
					<param?name="contentDisposition">attachment;filename="${downloadFileName}"</param>
					<param?name="bufferSize">8192</param>					
				</result>
			</action>

String filename;

public String getDownloadFileName() {

String downloadFileName = "";

try {

downloadFileName = URLEncoder.encode(filename,"UTF-8");

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return downloadFileName;

}

public InputStream getInputStream() throws IOException{

String path = ServletActionContext.getServletContext().getRealPath("/images");

String filePath = path + "\\" + filename;

File file = new File(filePath);

return FileUtils.openInputStream(file);

//return ServletActionContext.getServletContext().getResourceAsStream(inputPath);

}


正在回答

5 回答

你要看他是在獲取文件信息是報的錯誤,應該是在jsp中少了要下載文件的信息http://img1.sycdn.imooc.com//56a9c4ce0001b66f06350219.jpg

0 回復 有任何疑惑可以回復我~
<a?href="download?filename=360截圖20150601210855523.jpg">點擊下載</a>

如果你下載文件時從頁面獲取文件的名稱,如果文件名有中文的話,報

Can?not?find?a?java.io.InputStream?with?the?name?[inputStream]?in?the?invocation?stack.?Check?the?<param?name="inputName">?tag?specified?for?this?action.

后臺控制臺可以看到java.io.FileNotFoundException異常:

java.io.FileNotFoundException:?C:\Users\Administrator\Pictures\360??????20150601210855523.jpg?(文件名、目錄名或卷標語法不正確。)

那么你在action中處理文件名稱的時候需要對其進行轉碼,將中文文件名轉碼成能識別的文件名

String?filePath?=?path?+?"\\"?+?new?String(filename.getBytes("ISO-8859-1"),"UTF-8"));

這樣解決了下載中文文件名報錯的問題。前面的回答可用在文件固定的下載上,這個可以用在文件名不固定的下載上。

0 回復 有任何疑惑可以回復我~

出現

Can?not?find?a?java.io.InputStream?with?the?name?[inputStream]?in?the?invocation?stack.?Check?the?<param?name="inputName">?tag?specified?for?this?action.

異常時,通常:

1,文件路徑不對,根本就沒獲取到文件,可以將獲得的InputStream打印,如果為null,則檢查文件路徑;

2,在action中沒有寫配置文件中"<param name="inputName">"后面屬性的那個get方法.

3,以上均無問題,那就是使用

return?ServletActionContext.getServletContext().getResourceAsStream("...")

獲取流的時候,保證文件位置在 ServletContext 當中,就是說要在當前的應用上下文中,如果是從外部引入文件,比如:C:/Users/Administrator/Pictures/360截圖20150601210855523.jpg ,要手動建一個流

public?InputStream?getInputStream(){
		File?file?=?new?File(inputPath);
		InputStream?is?=?null;
		try?{
			is?=?new?FileInputStream(file);
		}?catch?(FileNotFoundException?e)?{
			e.printStackTrace();
		}
		return?is;
				//ServletActionContext.getServletContext().getResourceAsStream(inputPath);
	}

以上應該能解決你的問題。

0 回復 有任何疑惑可以回復我~

也是這個問題


0 回復 有任何疑惑可以回復我~

Struts Problem Report

Struts has detected an unhandled exception:

Messages: ? ?

Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the

tag specified for this action.

? ?

File: ? ?org/apache/struts2/dispatcher/StreamResult.java ? ?

Line number: ? ?237 ? ?

Stacktraces

java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check thetag specified for this action. ? ?

? ?org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:237)
? ?org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
? ?com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
? ?com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
? ?com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
? ?org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
? ?com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
? ?com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
? ?com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
? ?com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
? ?org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)


0 回復 有任何疑惑可以回復我~
#1

風滿西樓

設置文件類型的時候可設置編碼集,解決報錯問題。 <param name="contentType">application/octet-stream;charset=UTF-8</param><!-- 文件類型 ,編碼集-->
2015-08-03 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

下載 中文名稱的文件 struts報錯

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號