如何使用ajax调用服务器在新的浏览器窗口中呈现文档。
到目前为止,我已经完成了以下工作。
第1步:在按钮单击并传递文件名时对服务器进行ajax调用:
$(document).ready(
function(){
$('#clickme').click(function(){
$.ajax({
type:"GET",
url:"App/getfile",
data:{'filename':'D:\\sample.pdf'}
}).done(function(msg){
var wind = window.open("_blank");
wind.document.write(msg);
});
});
}
);
第2步:我在服务器端使用Spring控制器:
package my.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ServeFiles {
@RequestMapping(value="getfile",method=RequestMethod.GET,produces="application/pdf")
public void serve(HttpServletRequest request,HttpServletResponse response) throws
Exception{
InputStream is = new FileInputStream(new File(request.getParameter("filename")));
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Disposition", "attachment;filename='mypdf.pdf'");
int read;
while((read=is.read())!=-1){
response.getOutputStream().write(read);
}
response.flushBuffer();
}
}
当pdf作为字节发送到浏览器时。从ajax代码中,您可以看到我正在将其写入一个新窗口,如下所示
%PDF-1.4 5 0 obj
正如你所看到的,它在页面上到处显示Unicode字符。但我希望它像普通的pdf(或)任何其他文档(excel、文档、ppt)一样显示。
我怎么能这么做?
正如Dirk Lachowski在他的评论中提到的,你采取的方法有点问题。pdf是一个二进制文件(不是ascii),因此它需要某种内容类型,以便浏览器按照你的需要解释它(我看到你确实在Java代码中使用了“产生应用程序/pdf”)
您的控制器方法看起来没问题。因此,只需尝试通过执行以下操作在新窗口上打开链接:
<a href="App/getfile?filename=YOUR_FILE" target="_blank">Click to view</a>
祝你好运!
谢谢你帮我。
我遵循了谢伊的建议,并按预期工作。
我做了一个window.open("App/getfile? filepath="String(file),"_blank");
在我的js中,它的工作很棒。希望请告诉我是否可以在浏览器中使用mime类型打开微软文档文件,如(.文档,.docx,.ppt,.pptx,.xls,.xlsx)。
注意:浏览器是Internet Explorer 8.0
尝试在新窗口/选项卡中使用iframe/open文件。