0
在我心中的代碼這兩位應該工作一樣:
window.location = "../PlanView/ExportAsPDF";
$.ajax({
url: '../PlanView/ExportAsPDF',
data: { },
success: function (stream) { window.location = stream; }
});
代碼的前位觸發用戶.PDF文件下載。第二個不 - 我的瀏覽器網絡流量有一個奇怪的請求。
有人可以突出顯示我應該注意的關鍵區別嗎?
更深入的解釋:
我需要更多的數據傳遞到我的服務器比允許的URL。因此,我需要發送到服務器而不是GET。我不能使用以前的代碼,因爲我無法將這麼多信息推送到URL中 - 服務器將以414響應。
我想用後者複製前一位代碼的功能。因爲第一個告訴瀏覽器中顯示的文件,第二個不
public ActionResult ExportAsPDF(string dataURL)
{
Document document = new Document(PageSize.A4.Rotate(), 15, 15, 30, 65);
byte[] buffer = new byte[0];
using (MemoryStream memoryStream = new MemoryStream())
{
PdfWriter.GetInstance(document, memoryStream);
document.Open();
document.Add(new Paragraph("First PDF file"));
document.Close();
buffer = memoryStream.ToArray();
}
return File(buffer, "application/pdf", "PlanView.pdf");
}
好了,我怎麼告訴瀏覽器中顯示的文件?在我的實際實現中,我使用POST而不是GET - 所以我必須使用後面的代碼而不是前者。然而,當使用後者時,我的下載不會觸發 - 只有前者。 – 2012-03-09 00:55:52
瀏覽器需要一個URL來顯示文件。現在,如何在該URL下服務該文件是另一回事......您既可以擁有一個普通文件,也可以通過一些後臺代碼(用PHP,Python或其他語言編寫)來發送內容,而這些內容似乎都是您想要做的。當然,後者(ajax請求)將不起作用,除非你找回的是該文件的URL。然後你可以做你正在做的事情,即window.location = URL。因此,例如,使您的POST請求,並讓它返回的文件的URL,然後直接瀏覽器到該URL ... – kgr 2012-03-09 00:59:04
好吧,所以指你的更新,什麼是「流」變量的內容,即你的服務器是什麼返回? – kgr 2012-03-09 01:01:41