Gou*_*rav 11 java csv servlets download
我正在开发JAVA EXTJS应用程序,我需要在其中创建和下载CSV文件.
单击按钮时,我希望在客户端计算机中下载CSV文件.
在按钮监听器上,我使用ajax调用servlet.在那里我正在创建一个CSV文件.
我不希望CSV文件保存在服务器中.我希望文件应该使用下载选项动态创建.
我希望文件的内容创建为字符串,然后我将内容作为文件提供,它将在浏览器中作为下载模式打开.(这是我用其他语言实现的,但不知道如何在java中实现它)
这是我的代码,仅用于创建CSV文件,但如果我只能将文件下载为CSV,我真的不想创建或保存CSV文件.
public String createCSV() {
try {
String filename = "c:\\test.csv";
FileWriter fw = new FileWriter(filename);
fw.append("XXXX");
fw.append(',');
fw.append("YYYY");
fw.append(',');
fw.append("ZZZZ");
fw.append(',');
fw.append("AAAA");
fw.append(',');
fw.append("BBBB");
fw.append('\n');
CSVResult.close();
return "Csv file Successfully created";
} catch(Exception e) {
return e.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
谁可以帮我这个事.
谢谢
Gou*_*rav 28
我得到了解决方案,我将在下面发布.
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
response.setContentType("text/csv");
response.setHeader("Content-Disposition", "attachment; filename=\"userDirectory.csv\"");
try
{
OutputStream outputStream = response.getOutputStream();
String outputResult = "xxxx, yyyy, zzzz, aaaa, bbbb, ccccc, dddd, eeee, ffff, gggg\n";
outputStream.write(outputResult.getBytes());
outputStream.flush();
outputStream.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们不需要将文件保存/存储在服务器中.
谢谢
小智 6
首先,您需要获取 HttpServletResponse 对象,以便您可以将文件流式传输到其中。
注意:这个例子是我为我的一个项目写的,它在 Java 7 上有效。
假设你有 HttpServletResponse 你可以做这样的事情来流式传输文件。这样文件将被保存到客户的机器中。
public void downloadFile(HttpServletResponse response){
String sourceFile = "c:\\source.csv";
try {
FileInputStream inputStream = new FileInputStream(sourceFile);
String disposition = "attachment; fileName=outputfile.csv";
response.setContentType("text/csv");
response.setHeader("Content-Disposition", disposition);
response.setHeader("content-Length", String.valueOf(stream(inputStream, response.getOutputStream())));
} catch (IOException e) {
logger.error("Error occurred while downloading file {}",e);
}
}
Run Code Online (Sandbox Code Playgroud)
而流方法应该是这样的。
private long stream(InputStream input, OutputStream output) throws IOException {
try (ReadableByteChannel inputChannel = Channels.newChannel(input); WritableByteChannel outputChannel = Channels.newChannel(output)) {
ByteBuffer buffer = ByteBuffer.allocate(10240);
long size = 0;
while (inputChannel.read(buffer) != -1) {
buffer.flip();
size += outputChannel.write(buffer);
buffer.clear();
}
return size;
}
}
Run Code Online (Sandbox Code Playgroud)
它的作用是从源文件中获取输入流并将该流写入 HttpServletResponse 的输出流。这应该有效,因为它对我来说非常有效。希望这可以帮助。对不起,我的英语不好。
| 归档时间: |
|
| 查看次数: |
55881 次 |
| 最近记录: |