Download-Datei von ajax und ActionResult
Möchte ich die download-Dateien auf den browser mit ajax und ActionResult. Die Datei wird heruntergeladen und kehrte aus meinen ActionResult.
Sehe ich die Http-Abfrage ist ok und die Daten in der response-body. Das problem ist, dass die Datei nicht vorgeschlagen, um in der browser.
Alles scheint gut. Alle, die ich gesehen, im tutorial und forum waren, wie ich getan, aber mir nicht Wort XD. Ich verstehe nicht, was ist der Unterschied zwischen mir und den anderen.
Hier ist mein 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();
}
Hier ist mein javascript :
$.ajax({
url: '../Shipping/ShippingDownloadDNPriority?SALE_GUID=XXXXXXXXXXXXXX',
data: { SALE_GUID: DropShipping.GetRowKey(rowIndexSale) },
async: false,
//success: function (data) { window.downloadFile = data; }
});
Danke an alle
InformationsquelleAutor Gobelet | 2017-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
AJAX ist nur ein thin client. Nichts passiert mit der Antwort, die standardmäßig zurückgegeben. Sie sind verantwortlich für die Bereitstellung der Downloadmöglichkeit passieren. Jedoch, dies erfordert die Datei-API ist Teil von HTML5. Als Folge, ist dies nur möglich, in den modernen Browsern (IE10+).
Innen Ihre AJAX-success-Methode:
BEARBEITEN
jQuery nicht die Antwort interpretieren-Typ standardmäßig korrekt. Dann müssen Sie Ihre $.ajax-Aufruf etwas:
Können Sie schauen Sie sich eine CodePen hier, um zu sehen, dass es funktioniert.
Das funktioniert nicht, ich habe diesen Fehler : "Fehler beim bauen "Blob": Das 1. argument weder ein array, noch hat es indizierte Eigenschaften"
Siehe edit oben.
Sorry, aber diese worrk nicht auch. Ich habe die Meldung "DOMException: Fehler beim Lesen der 'responseText' - Eigenschaft von 'XMLHttpRequest': Der Wert ist nur verfügbar, wenn das Objekt "responseType" ist " oder 'text' ('blob')."
Nicht sicher, was Sie getan haben, aber wie man deutlich erkennen kann aus den CodePen habe ich in meiner Antwort, der code funktioniert. Suchen Sie nach, wo Sie Ihren code weicht von mir, oder zumindest aktualisieren Sie Ihre Frage zum gehören den aktuellen Stand des Codes.
InformationsquelleAutor Chris Pratt
Wechselte ich von Idee. Ich sende einfach meine pdf-Datei (aus meinem controller) in base-64 und in der ajax :
InformationsquelleAutor Gobelet