在学习文件下载的时候,我也是按照网络课程上面老师的代码一句一句敲得,和老师的一模一样;到最后测试下载的时候出现了如下的错误:
而老师的写的代码可以完美运行,以下是跟着老师敲的代码:
1 package com.action; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.InputStream; 6 import org.apache.struts2.ServletActionContext; 7 import com.opensymphony.xwork2.ActionSupport; 8 9 @SuppressWarnings("serial") 10 public class FileDownload extends ActionSupport { 11 12 public InputStream getDownloadFile() { 13 //获取资源文件路径 14 InputStream inputStream = ServletActionContext.getServletContext().getResourceAsStream("F:\\Eclipse\\workspace\\fileUpload_Download\\WebContent\\upload\\java.txt"); 15 return inputStream; 16 } 17 18 @Override 19 public String execute() throws Exception { 20 21 return SUCCESS; 22 } 23 }
struts.xml文件中的配置信息如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <constant name="struts2.devMode" value="true"></constant> 7 <package name="default" extends="struts-default"> 8 9 <action name="downloadFile" class="com.action.FileDownload"> 10 <result type="stream"> 11 <param name="contentDisposition">filename="java.txt"</param> 12 <param name="inputName">downloadFile</param> 13 </result> 14 </action> 15 </package> 16 </struts>
根据报错的信息可以知道,大致错误是找不到对应的文件,导致这种错误无非就是文件路径有错误,或者是根本就不存在这样的文件。所以在
public InputStream getDownloadFile(){...}方法中打印出inputStream,看看获取道德值是否为Null值。通过调试发现在控制台中打印出来的inputStream的值确实为null。(不知道为啥会获取不到,路径正确,文件也存在)。
所以只能另外想办法获取了,以下是在getDownloadFile()方法中另一种获取路径的方法:
1 @SuppressWarnings("serial") 2 public class FileDownload extends ActionSupport { 3 4 public InputStream getDownloadFile() { 5 6 File fileDownload = new File("F:\\Eclipse\\workspace\\fileUpload_Download\\WebContent\\upload\\java.txt"); 7 InputStream inputStream; 8 try { 9 inputStream = new FileInputStream(fileDownload); 10 System.out.println(inputStream); 11 return inputStream; 12 } catch (FileNotFoundException e) { 13 System.out.println("文件下载出错!"); 14 e.printStackTrace(); 15 } 16 return null; 17 } 18
改为这样后再次测试,发现可以运行通过。