2016-10-14 2 views
0

In meiner Anwendung verwende ich einen Aschx - Handler zum Download ppt, in dem ich einen Screenshot (aktuellen Bildschirm als Bild) erstellen und diesen Bildnamen an einen Handler (Ashx) von jQuery. Ich kann den Downloadstatus jedoch nicht verfolgen.Antwort zurück an Ajax von Aschx Handler in C#

Wenn es eine Möglichkeit gibt, Antwort von diesem Handler auf jquery zurückzugeben. Ich möchte wissen, wann das Herunterladen beendet wird.

mein aktuelles Szenario ist wie diese

  1. jquery wird einen Base64-String erzeugen und diese Zeichenfolge passieren hinter von Ajax-Aufruf kodieren, das zu Bild konvertieren und das Bild an einem Ort speichern

  2. auf den Erfolg Aufruf dieser Ajax-Anfrage wird es diesen Image-Namen erhalten und übergeben Sie diesen Image-Namen zu Handler

  3. Ich rufe diesen Handler mit "window.location.href"

meinen Code

Ajax-Aufruf zum Speichern des Bildes

$.ajax({ 
      type: "POST", 
      url: AQ.AMT.Url + "/Home/StoreImage", 
      //async: false, 
      data: "{'base64':'" + base64 + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (Data) { 
       window.location.href = "~/Download/Export.ashx?Type=PPT&downloadToken=" + Data.Result + "&Summary=" + summaryText + "&Note=" + noteText + "&Name=" + name + "&Sample=" + sampleSize + "&SampleColor=" + sampleColor + "&pptType=" + pptType + "&flipName=" + flipName; 
       //here i need some response 
      }, 
      error: function (e) { 
      } 
     }); 

Handler Code für das Herunterladen der ppt

public void ProcessRequest(HttpContext context) 
    { 
     DownloadPPT(context); 
    } 
public void DownloadPPT(HttpContext context) 
    { 
     //here i will take all parameters 
     try{ 
      //downloading the ppt 
      saveFile(pres, "" + name + "-" + FlipName + "-" + System.DateTime.Today.ToLongDateString());//ppt name 
     } 
     catch{ 

      } 
      finally 
      { 
      //after ppt download i am deleting that screenshot 
      if (File.Exists(path)) 
       File.Delete(path); 

      } 
    } 

Antwort

0

ich eine Lösung für diese bekam, Anstelle der Verwendung von Handler für Ich habe die Dateien heruntergeladen und Ajax und Jquery benutzt. in diesem code hinter ich werde die ppt erstellen und speichern die ppt in einigen ordner, und ich werde diesen namen an ajax response übergeben und anchor-tag verwenden, um den download in client seite selbst zu ermöglichen.

die ppt

[HttpPost] 
    public JsonResult StoreImage(ExportToPPtRequest request) 
    { 
     ExportPptString obj = new ExportPptString(); 
     string downloadToken = Guid.NewGuid().ToString(); 
     string filepath = Server.MapPath("~/Download/Temp/" + downloadToken + ".png"); 
     try 
     { 
      using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(request.Base64))) 
      { 
       using (System.Drawing.Bitmap bm2 = new System.Drawing.Bitmap(ms)) 
       { 
        //bm2.Save(filepath); 

        downloadToken = ""; 

        downloadToken=DownloadPPT(bm2,request); 
        // bm2.Dispose(); 
       } 
       // ms.Close(); 
      } 

      obj.Result = downloadToken; 

     } 
     catch (Exception ex) 
     { 

     } 
     var result = Json(obj, JsonRequestBehavior.AllowGet); 
     return result; 
    } 

    public string DownloadPPT(Image imgToReplace, ExportToPPtRequest request) 
    { 

     string summaryText = request.Summary; 
     string note = request.Note; 
     string sampleSize = request.SampleSize; 
     string SampleColor = request.SampleColor; 
     string Type = request.Type; 
     string name = request.Name; 
     string pptName = ""; 
     try 
     { 
      //if (downloadToken == string.Empty || downloadToken == null) 
      // throw new Exception("Download Token is unavailable."); 

      Aspose.Slides.License license = new Aspose.Slides.License(); 
      license.SetLicense("Aspose.Slides.lic"); 
      var _tempPPT = ""; 
       _tempPPT = Server.MapPath("~/Download/Template/ExportPPt.pptx"); 

      Aspose.Slides.Presentation pres = new Aspose.Slides.Presentation(_tempPPT); 


      pptName= saveFile(pres);//ppt name 

     } 
     catch (Exception ex) 
     { 

     } 

     return pptName; 

    } 
    public string saveFile(Aspose.Slides.Presentation pres) 
    { 

     string downloadToken = Guid.NewGuid().ToString(); 
     try 
     { 
      //MemoryStream objMemoryStream = new MemoryStream(); 
      //pres.Save(objMemoryStream, Aspose.Slides.Export.SaveFormat.Pptx); 
      pres.Save(Server.MapPath("~/Download/Temp/" + downloadToken + ".pptx"), Aspose.Slides.Export.SaveFormat.Pptx); 
      //byte[] buffer = objMemoryStream.ToArray(); 
      //HttpContext.Current.Response.Clear(); 
      //HttpContext.Current.Response.Buffer = true; 
      //HttpContext.Current.Response.AddHeader("Content-disposition", String.Format("attachment; filename=\"{0}.pptx\"", PresentationName)); 
      //HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; 
      //HttpContext.Current.Response.AddHeader("Content-Length", buffer.Length.ToString()); 
      //HttpContext.Current.Response.BinaryWrite(buffer); 
      //HttpContext.Current.Response.Flush(); 
      //HttpContext.Current.Response.Close(); 


     } 
     catch (Exception ex) 
     { 
     } 
     return downloadToken; 
    } 

in jquery Speichern

$.ajax({ 
     type: "POST", 
     url: AQ.AMT.Url + "/Home/StoreImage", 
     //async: false, 
     data: JSON.stringify({ request: request }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (Data) { 

      var _tempPPT = AQ.AMT.Url + "/Download/Temp/" + Data.Result + ".pptx"; 
      // Trick for making downloadable link 
      a = document.createElement('a'); 
      a.href = _tempPPT;// window.URL.createObjectURL(xhttp.response); 
      a.id = "idanchrPPT"; 
      // Give filename you wish to download 
      var today = new Date(); 
      var dd = today.getDate(); 
      var mm = today.getMonth() + 1; //January is 0! 
      var yyyy = today.getFullYear(); 
      if (dd < 10) { 
       dd = '0' + dd 
      } 
      if (mm < 10) { 
       mm = '0' + mm 
      } 
      today = dd + '/' + mm + '/' + yyyy; 
      if (flipName == "") 
       a.download = "" + name + "-" + today + ".pptx"; 
      else 
      a.download = "" + name + "-" + flipName + "-" + today + ".pptx"; 
      a.style.display = 'none'; 
      document.body.appendChild(a); 
      a.click(); 
      $("#idanchrPPT").remove(); 


      //deleting the file 
      var deleteFiles = {}; 
      deleteFiles.FilePath = Data.Result; 
      setTimeout(function() { 
       $.ajax({ 
        type: "Post", 
        data: JSON.stringify({ deleteFiles: deleteFiles }), 
        url: AQ.AMT.Url + "/Home/DeleteExportedPPt", 
        async: true, 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (result) { 
        }, 
        error: function (result) { 
        } 
       }); 
      }, 1000); 
     }, 
     error: function (e) { 
     } 
    });