我想在浏览器中使用ajax和ActionResult下载文件。该文件已下载并从我的ActionResult返回。
我看到Http查询正常,并且在响应正文中看到了数据。问题是不建议将该文件保存在浏览器中。
一切似乎都很好。我在教程和论坛中看到的所有内容都和我一样,但我没有说过XD。我不明白我和其他人之间有什么区别。
这是我的ActionResult:
public ActionResult ShippingDownloadDNPriority(string SALE_GUID) { int supId = -1; int.TryParse(Session["SupId"].ToString(), out supId); if (supId < 0) return null; WebResponse response = CallApi.DownloadAndCreateDN(Session["UserLogin"].ToString(), Session["IdentConnect"].ToString(), SALE_GUID, supId, true); Stream responseStream = response.GetResponseStream(); var cd = new System.Net.Mime.ContentDisposition { FileName = "myfile.pdf", Inline = false, }; Response.Headers.Add("Content-Disposition", cd.ToString()); Response.ContentType = "application/octet-stream"; return File(responseStream, System.Net.Mime.MediaTypeNames.Application.Pdf, "myfile.pdf"); } public static WebResponse DownloadAndCreateDN(string login, string session, string SALE_GUID, int supid, bool priority) { string[] res = new string[2]; StringBuilder postData = new StringBuilder(); postData.AppendLine("{"); postData.AppendLine(string.Format("\"login\":\"{0}\",", login)); postData.AppendLine(string.Format("\"session\":\"{0}\",", session)); postData.AppendLine(string.Format("\"saleguid\":\"{0}\",", SALE_GUID)); postData.AppendLine(string.Format("\"supid\":{0},", supid)); postData.AppendLine(string.Format("\"prority\":{0}", priority.ToString().ToLower())); postData.AppendLine("}"); ASCIIEncoding ascii = new ASCIIEncoding(); byte[] postBytes = ascii.GetBytes(postData.ToString()); string url = Properties.Settings.Default.ISAPIAddress + "deliverynote/create"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = postBytes.Length; Stream postStream = request.GetRequestStream(); postStream.Write(postBytes, 0, postBytes.Length); postStream.Flush(); postStream.Close(); return request.GetResponse(); }
这是我的javascript:
$.ajax({ url: '../Shipping/ShippingDownloadDNPriority?SALE_GUID=XXXXXXXXXXXXXX', data: { SALE_GUID: DropShipping.GetRowKey(rowIndexSale) }, async: false, //success: function (data) { window.downloadFile = data; } });
谢谢大家
我改变了主意。我只是简单地以64为基础发送pdf(从我的控制器)并在ajax中进行制作:
success: function (data) { window.open("data:application/pdf;base64," + data.data, '_blank'); }