• 有关Struts下载文件时报错问题


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

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

     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">attachment;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     

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

     
  • 相关阅读:
    小程序行内点击事件冲突解决
    小程序带参返回刷新主页面
    小程序时间选择器(精确到秒)
    Bootstrap-Table事件和方法
    JS 解决txt文件直接打开而不是下载
    Bootstrap-Table进阶篇
    Bootstrap-Table入门篇
    Angular+SSM+Ajax的简单购物车实例
    Angular实现简单购物车
    K3BOS单据获取单据体行数
  • 原文地址:https://www.cnblogs.com/lihuibin/p/8040479.html
Copyright © 2020-2023  润新知