在学习文件下载的时候,我也是按照网络课程上面老师的代码一句一句敲得,和老师的一模一样;到最后测试下载的时候出现了如下的错误:

而老师的写的代码可以完美运行,以下是跟着老师敲的代码:

 package com.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial")
public class FileDownload extends ActionSupport { public InputStream getDownloadFile() {
//获取资源文件路径
InputStream inputStream = ServletActionContext.getServletContext().getResourceAsStream("F:\\Eclipse\\workspace\\fileUpload_Download\\WebContent\\upload\\java.txt");
return inputStream;
} @Override
public String execute() throws Exception { return SUCCESS;
}
}

struts.xml文件中的配置信息如下:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts2.devMode" value="true"></constant>
<package name="default" extends="struts-default"> <action name="downloadFile" class="com.action.FileDownload">
<result type="stream">
<param name="contentDisposition">attachment;filename="java.txt"</param>
<param name="inputName">downloadFile</param>
</result>
</action>
</package>
</struts>

根据报错的信息可以知道,大致错误是找不到对应的文件,导致这种错误无非就是文件路径有错误,或者是根本就不存在这样的文件。所以在

public InputStream getDownloadFile(){...}方法中打印出inputStream,看看获取道德值是否为Null值。通过调试发现在控制台中打印出来的inputStream的值确实为null。(不知道为啥会获取不到,路径正确,文件也存在)。
所以只能另外想办法获取了,以下是在getDownloadFile()方法中另一种获取路径的方法:
 @SuppressWarnings("serial")
public class FileDownload extends ActionSupport { public InputStream getDownloadFile() { File fileDownload = new File("F:\\Eclipse\\workspace\\fileUpload_Download\\WebContent\\upload\\java.txt");
InputStream inputStream;
try {
inputStream = new FileInputStream(fileDownload);
System.out.println(inputStream);
return inputStream;
} catch (FileNotFoundException e) {
System.out.println("文件下载出错!");
e.printStackTrace();
}
return null;
}

改为这样后再次测试,发现可以运行通过。

 

有关Struts下载文件时报错问题的更多相关文章

  1. Linux下载文件时报错 To connect to ohse.de insecurely, use ‘--no-check-certificate’.

    远程调用下载文件直接用wget就可以,一般文件路径类型是http.如果有遇到是https就会下载出错. 错误如下: [root@vmu010226-node1 tmp]# wget https://w ...

  2. SpringBoot打jar包-下载文件时报错-class path resource xxxxxx cannot be resolved to URL because it does not exist

    一.问题由来 新项目的开发中,打包方式由war包改为了jar包的方式,这样在部署的时候更加的方便.测试环境使用pm2这个工具来管理项目的运行,停止,重启等等非常方便. 可是当测试人员在测试项目中的文件 ...

  3. python 使用read_csv读取 CSV 文件时报错

    读取csv文件时报错 df = pd.read_csv('c:/Users/NUC/Desktop/成绩.csv' ) Traceback (most recent call last):  File ...

  4. python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib

    python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...

  5. javah生成jni头文件时报错 Error: cannot access android.support...

    javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...

  6. python读取txt文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x8e in position 8: illegal multibyte sequence

    python读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x8e in position 8: illegal multibyte ...

  7. python 读取文件时报错UnicodeDecodeError

    python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...

  8. Microsoft SQL Server 17导出xlsx文件时报错:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. (System.Data)

    导出数据时报错: 如果你是导出office 2007格式 TITLE: SQL Server Import and Export Wizard ---------------------------- ...

  9. 在英文Windows操作系统上使用SQL Server Management Studio(SSMS)导入Excel 97-2003文件时报错:Failure creating file

    今天在公司服务器上使用SQL Server Management Studio(SSMS)导入Excel 97-2003文件(.xls)时报错: Failure creating file. (Mic ...

随机推荐

  1. 为什么“how to say”是错的?

    2018-04-26 15:53 英语口语 吉米老师前言:如果让老外评选十大Chinglish之最,老师猜"how to say"一定榜上有名.几乎每一位学习英语的童鞋,都曾有过脱 ...

  2. JRE vs OpenJDK vs Oracle JDK

    JRE vs OpenJDK vs Oracle JDK 在我们继续了解如何安装Java之前,让我们快速地了解JRE.OpenJDK和Oracle JDK之间的不同之处. JRE(Java Runti ...

  3. 转:Mysql float类型where 语句判断相等问题

    原文地址:https://www.2cto.com/database/201111/111983.html 原文内容如下: Mysql where 语句中有float 类型数据判断相等时,检索不出记录 ...

  4. win10下切换多个jdk版本

    1.每次切换时,修改JAVA_HOME变量 2.编辑path环境变量,如图所示,将%JAVA_HOME%\jre\bin和%JAVA_HOME%\bin移到最上边 3.在控制面板中打开java控制面板 ...

  5. 【PyQt5-Qt Designer】Qt 的标准对话框总结

    PyQt5 各种弹出对话框的总结 忙碌了两天才总结完,深刻体会到 “编程在实践中才能领悟更深”,后续有了更多的 理解继续来补充... 效果如下: 参考: https://www.cnblogs.com ...

  6. word2vec参数理解

    之前写了对word2vec的一些简单理解,实践过程中需要对其参数有较深的了解: class gensim.models.word2vec.Word2Vec(sentences=None,size=10 ...

  7. C# Asp.net 修改Ueditor编辑器上传图片保存路径

    默认情况下Ueditor图片上传的保存路径是在/ueditor/net/upload/目录下,(如:http://localhost/ueditor/net/upload/123.png), 但是有时 ...

  8. spring学习(03)之bean实例化的三种方式

    bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构 ...

  9. centos7 管理开机启动:systemd

    一.CentOS7 systemd 介绍 在 CentOS7 中,使用 systemd 来管理其他服务是否开机启动,systemctl 是 systemd 服务的命令行工具 [root@mysql ~ ...

  10. android下的样式

    android中控件,假如我们把样式都写死在控件的配置文件上的话.一旦改动可谓牵一发而动千军.那么我们能够把样式写在style.xml文件里.然后引用,在API14以上版本号. 该文件位于values ...