我有一个生成PDF的动作类。该contentType适当地设定。
contentType
public class MyAction extends ActionSupport { public String execute() { ... ... File report = signedPdfExporter.generateReport(xyzData, props); inputStream = new FileInputStream(report); contentDisposition = "attachment=\"" + report.getName() + "\""; contentType = "application/pdf"; return SUCCESS; } }
我action 通过Ajax调用来称呼它。我不知道将流传输到浏览器的方法。我尝试了几件事,但没有任何效果。
$.ajax({ type: "POST", url: url, data: wireIdList, cache: false, success: function(response) { alert('got response'); window.open(response); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert('Error occurred while opening fax template' + getAjaxErrorString(textStatus, errorThrown)); } });
上面给出了错误:
Your browser sent a request that this server could not understand.
你不必为此使用Ajax。只是一个<a>环节是不够的,如果你设置content-disposition到attachment服务器端代码。这样,如果你最关心的是父页面将保持打开状态(为什么你会为此而不必要地选择Ajax?)。此外,没有办法很好地同步处理这个问题。PDF不是字符数据。它是二进制数据。你不能做类似的事情$(element).load()。你想要对此使用全新的请求。对于那<a href="pdfservlet/filename.pdf">pdf</a>是完全合适的。
<a>
content-disposition
attachment
$(element).load()
<a href="pdfservlet/filename.pdf">pdf</a>
为了在服务器端代码方面为你提供更多帮助,你需要更多地介绍所使用的语言并发布代码尝试的摘录。