Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中下载文件时出现问题_Java_Excel_Jsp_Export - Fatal编程技术网

在java中下载文件时出现问题

在java中下载文件时出现问题,java,excel,jsp,export,Java,Excel,Jsp,Export,我有一个问题,我一直在寻找一个多星期的解决办法,但我不能。我尝试了很多例子,但都没有成功。如果有人能帮忙,那就太好了 这是我的问题 我尝试在java和jsp之间创建一个接口,如下所示: 我在本地网络的共享文件夹中有一个文件。例如: \myserver\temp\myexcelFile.xls 因此,我想做的是,当您实际单击按钮时,我的jsp页面中有一个jsp按钮,我需要它从服务器获取文件,并提示用户是否在本地打开或保存它,就像您正在下载文件一样 我创建了一个按钮,当它被触发时,它在我的java文

我有一个问题,我一直在寻找一个多星期的解决办法,但我不能。我尝试了很多例子,但都没有成功。如果有人能帮忙,那就太好了

这是我的问题

我尝试在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文件,我希望它能够提示用户保存正确的文件

请给我一些建议

感谢所有愿意在这方面做出贡献的人


关于,

要通过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
    }

好的,我测试了你的例子,我首先意识到它抛出了一个异常,我发现它与文件位置有关。根据文件名,文件名为“file://myserver/temp/myExcelFile.xls"; 对服务器可见,格式为:“文件:/myserver/temp/myExcelFile.xls”;对服务器可见,格式为:“文件:/myserver/temp/myExcelFile.xls”;所以它去掉了一个斜杠,我也试着在现有的斜杠上加上两个斜杠:像这样“file:////myserver/temp/myExcelFile.xls"; 但还是不起作用。因此,我最终将路径更改为:“\\\\myserver\\temp\\myExcelFile.xls”。这一个有效,没有抛出异常。我得到了保存文件的提示。但当我试图打开它时,它花了几分钟打开,然后它说:单元格数据太大,它生成了一个日志文件说:单元格数据中的HTML错误太大:文件仍然损坏。在浏览器中输入以下内容时:file://myserver/temp/myExcelFile.xls,它可以打开。您是否尝试过保存文件然后打开它?文件有多大?