【问题标题】:How to change download filename in struts如何在struts中更改下载文件名
【发布时间】:2013-07-04 14:18:13
【问题描述】:

目前,我要下载的文件名为“downloadStatistic.html”。我想将其更改为“我想要的任何东西”。顺便说一下,这是一个 *.csv 文件。

这是我下载操作的代码:

@Scope("prototype")
@Component("/downloadStatistic")
public class StatisticDownloadAction extends DownloadAction {

@Override
protected StreamInfo getStreamInfo(ActionMapping actionMapping,
                                   ActionForm actionForm,
                                   HttpServletRequest httpServletRequest,
                                   HttpServletResponse httpServletResponse) throws Exception {

    String filepath = httpServletRequest.getParameter("filepath");
    String contentType = "text/comma-separated-values";

    File file = new File(filepath);

    return new FileStreamInfo(contentType, file);
    }
}

这就是我的 struts xml:

    <action
            path="/shipmentStatistic"
            name="shipmentStatisticForm"
            scope="request"
            validate="false"
            type="de.logentis.struts.DelegatingActionProxy"
            input="/jsp/statistics/ShipmentStatistic.jsp">
        <forward name="back" path="/menu.html" redirect="true"/>
        <forward name="download" path="/downloadStatistic.html?filepath={0}" redirect="true"/>
    </action>

    <action
            path="/downloadStatistic"
            type="de.logentis.struts.DelegatingActionProxy">
        <forward name="back" path="/shipmentStatistic.html" redirect="true"/>
    </action>

在哪里可以定义下载文件的文件名?

【问题讨论】:

    标签: java download struts filenames


    【解决方案1】:

    也许您可以尝试以下方法:

    public class DownloadFileAction extends Action{
    
     @Override
     public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response)
     throws Exception {
    
      String filepath = httpServletRequest.getParameter("filepath");
      response.setContentType("application/octet-stream");
      response.setHeader("Content-Disposition","attachment;filename=statistic.csv");
    
      try 
      {
        FileInputStream in = 
            new FileInputStream(new File(filepath));
        ServletOutputStream out = response.getOutputStream();
        byte[] outputByte = new byte[4096];
        while(in.read(outputByte, 0, 4096) != -1){
         out.write(outputByte, 0, 4096);
       }
       in.close();
       out.flush();
       out.close();
    
     }catch(Exception e){
       e.printStackTrace();
     }
    
     return null;
     }
    }    
    

    或者:

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                             HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    
    String filepath = request.getParameter("filepath");
    File statisticFile = new File(filepath);
    
    byte[] ourArray = new byte[Integer.parseInt(statisticFile.length() + "")];
    
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename=" + statisticFile.getName());
    
    FileInputStream in = new FileInputStream(statisticFile);
    ServletOutputStream out = response.getOutputStream();
    
    try {
        int c;
        while ((c = in.read()) != -1) {
            out.write(c);
            out.flush();
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (out != null) {
            out.close();
        }
    }
    return null;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2012-07-29
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多