问题在java中下载文件

时间:2016-02-18 22:14:03

标签: java excel jsp export

我有一个问题,我一直在寻找一个星期试图找到它的解决方案,但我不能。我尝试过很多例子而没有用。如果有人可以提供帮助那就太棒了。

这是我的问题。

我正在尝试在java和jsp之间创建一个接口,如下所示:

我的文件位于本地网络的共享文件夹中。例如:

\ MYSERVER \ TEMP \ myexcelFile.xls

所以,我想要做的是,当我实际点击按钮时,我的jsp页面中有一个jsp按钮,我需要它从服务器获取文件并提示用户是否在本地打开或保存,就好像你正在下载文件一样。

我创建了一个按钮,当它被触发时,它会调用我的java文件中的一个过程,该过程实际上是在jsp中导入的,它从共享文件夹中读取文件,然后提示用户保存它。

这是我的程序:

public void getFile(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    String fileName = "file://myserver/temp/myExcelFile.xls";
    URL url = new URL(fileName);

    OutputStream out = null;

    try {
        out = new FileOutputStream(url.getFile());
        byte[] totalBytes = fileName.getBytes();
        out.write(totalBytes);
    } finally {

        if (out != null) {
            out.close();
        }
    }

所以在jsp中,当有人按下按钮时,它会按如下方式调用该过程:

所以根据我的需要,一旦按下按钮,它应该提示我保存这个文件:myExcelFile.xls,这样你就可以选择你想要保存的本地路径。

这就是我想要实现的目标。

我看到了数以百计的例子,但没有一个能够按我的需要工作。

我遇到的问题是,当我按下按钮时,它会提示我保存或打开文件,但文件总是损坏,它总是说文件不可读,并提示缺少样式和等......

我尝试了所有我能想到的例子,甚至做了很多关于它的研究,但我看到的例子都没有帮助。

我希望这是一个通用的提示,所以如果我有一个pdf或html文件,我希望它能够提示正确的文件供用户保存。

请建议。

感谢所有愿意为此做出贡献的人。

的问候,

1 个答案:

答案 0 :(得分:0)

要通过servlet从服务器获取文件,以下代码段应该有所帮助。处理通用文件类型的技巧是使用response.setContentType()为文件设置正确的MIME类型。

public void getFile(HttpServletRequest request,
    HttpServletResponse response) throws Exception {

    String fileName = "//myserver/temp/myExcelFile.xls";
    String displayName = "myExcelFile.xls";

    try(
        FileInputStream fileIn = new FileInputStream(fileName);
        BufferedInputStream buffIn = new BufferedInputStream(fileIn);
       ) {
        // Add logic to detect and change MIME Type
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition","attachment; filename=\"" + displayName + "\"");

        BufferedOutputStream buffOut = new BufferedOutputStream(response.getOutputStream());
        byte[] data = new byte[1024];
        int dataSize = 0;
        while((dataSize = buffIn.read(data)) != -1) {
            buffOut.write(data, 0, dataSize);
        }
        buffOut.flush();
    } catch (Exception e) {
        // Handle or throw exception
    }