Java 如何在struts中更改下载文件名
目前,我想下载的文件名名为“downloadStatistic.html”。我想把它改成“我想要什么”。顺便说一下,这是一个*.csv文件 以下是我的下载操作代码:Java 如何在struts中更改下载文件名,java,download,struts,filenames,Java,Download,Struts,Filenames,目前,我想下载的文件名名为“downloadStatistic.html”。我想把它改成“我想要什么”。顺便说一下,这是一个*.csv文件 以下是我的下载操作代码: @Scope("prototype") @Component("/downloadStatistic") public class StatisticDownloadAction extends DownloadAction { @Override protected StreamInfo getStreamInfo(Action
@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>
在哪里可以定义下载文件的文件名?也许您可以尝试以下操作:
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;
}