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