我想在浏览器中使用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');
}
问题内容: 我的GSP中有这个ajax调用: 这是我的控制器操作的代码块: 我从通过$ .Ajax方法从视图传递的数据中获取票证列表。比我将数据格式化为CSV格式,然后我想将数据导出为CSV文件,但没有任何反应。数据已发送到客户端,但是由于内容配置不正确,因此没有可供下载的文件。我想念什么?我试图做类似的事情: 并在控制器中生成纯字符串,但是那样我得到的文件没有扩展名是不可接受的。 我该如何实现?
问题内容: 我正在尝试使浏览器下载从ajax响应接收到的pdf文件。 受jquery ajax下载pdf文件启发,我模拟了如下单击/下载事件: 不幸的是,这仅适用于Chrome,不适用于Firefox + IE。当我尝试在最后两个浏览器中触发它时,没有任何反应。 由于从CMS继承,脚本和标记被放置在iframe中,但是我不确定这是否有影响。 关于如何针对所有现代浏览器进行优化的想法? 问题答案:
我有一个javascript应用程序,它向某个URL发送ajax POST请求。响应可能是一个JSON字符串,也可能是一个文件(作为附件)。我可以很容易地在ajax调用中检测到内容类型和内容配置,但是一旦检测到响应包含文件,我如何提供客户端下载它呢?我在这里读过很多类似的文章,但没有一篇能提供我想要的答案。 请,请,请不要发布建议我不应该为此使用ajax或者我应该重定向浏览器的答案,因为这些都不是
问题内容: 我自己构建了一个JObject,并希望将其作为ActionResult返回。我不想创建然后序列化数据对象 例如 问题答案: 您应该只可以在操作方法中执行此操作:
问题内容: 我有一个JavaScript应用程序,可将ajax POST请求发送到某个URL。响应可能是JSON字符串,也可能是文件(作为附件)。我可以在ajax调用中轻松检测Content-Type和Content- Disposition,但是一旦检测到响应中包含文件,如何为客户端提供下载文件?我在这里阅读了许多类似的主题,但是没有一个主题提供我想要的答案。 拜托,拜托,请不要发布暗示我不应该
问题内容: 我正在尝试实施一项服务,该服务会自动使用请求的文件开始下载。 这是我的AJAX呼叫: 这是我的Spring Service方法GET: 当我的客户端从服务器请求现有文件时,将执行AJAX 方法,但该文件甚至没有下载。我做错什么了吗? 问题答案: 不要使用ajax,只需将window.location.href设置为文件的URL,然后在服务器脚本中设置http内容处理标头即可强制浏览器保