我有一个问题,我一直在寻找一个星期试图找到它的解决方案,但我不能。我尝试过很多例子而没有用。如果有人可以提供帮助那就太棒了。
这是我的问题。
我正在尝试在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文件,我希望它能够提示正确的文件供用户保存。
请建议。
感谢所有愿意为此做出贡献的人。
的问候,
答案 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
}