我正在使用java和struts。我的情况是页面中有“下载” 链接。单击此链接后,控件转到 Action类,在这里我有String内容,需要将其写入 .txt 文件,然后下载该txt文件。 / p>
最终,每当我们单击下载链接时,我们都应该能够下载包含特定字符串内容的txt文件。
我在下面的代码段中使用了
FileOutputStream outputStream = new FileOutputStream(fileNameWithDirectory);
outputStream.write(fileContentString.getBytes());
outputStream.close();
ActionForward forward = new ActionForward("doc/" + filename);
forward.setName(filename);
forward.setRedirect(true);
return forward;
我也尝试用FileWriter
代替FileOutputStream
,
FileWriter fileWriter = new FileWriter(fileNameWithDirectory);
fileWriter.write(fileContentString);
fileWriter.flush();
fileWriter.close();
但始终不下载txt文件,而是打开一个新窗口,在其中写入String内容。 请提出建议,我该如何下载该 .txt 文件。
答案 0 :(得分:0)
您应该添加Content-Disposition: attachment
来表示浏览器,它应该下载文件而不是打开文件。
查看更多详细信息here
Struts也有DownloadAction,您也可以使用它。
答案 1 :(得分:0)
您无需编写文件,然后重定向到它。您可以设置一个名为Content-Disposition的http响应标头,然后将数据打印到http响应正文中。
像这样使用它
response.addHeader("Content-Disposition", "Content-Disposition: attachment; filename=\""+filename+"\"");
当然这取决于您使用的技术堆栈。
答案 2 :(得分:0)
将文本文件转换为流。并设置要下载的内容类型。 response.setContentType(“ application / pdf”);
try {
// get your file as InputStream
InputStream is = ...;
// copy it to response's OutputStream
org.apache.commons.io.IOUtils.copy(is, convertedTextFiletoStream);
} catch (IOException ex) {
log.info("Error writing file to output stream. Filename was '{}'", fileName, ex);
throw new RuntimeException("IOError writing file to output stream");
}