在我的应用程序中,我使用一个ashx处理程序下载ppt,因为我将创建一个屏幕截图(当前屏幕作为图像)并将该图像名称从jquery传递给一个处理程序(ashx)。但我无法跟踪下载状态。
如果有任何方法可以将该处理程序的响应返回给jquery。那就是我想知道下载何时完成。
我目前的情况是这样的
jquery将生成一个base64字符串,并通过ajax调用将该字符串传递给后面的代码,将其转换为图像并将该图像保存在一个位置
关于该ajax请求的成功调用,它将获取该图像名称并将该图像名称传递给处理程序
我使用" window.location.href"
我的代码
Ajax调用保存图像
$.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) {
}
});
下载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);
}
}
答案 0 :(得分:0)
我有一个解决方案,而不是使用处理程序下载文件我使用ajax和jquery。在这个代码后面我将创建ppt并将ppt保存在某个文件夹中,我将该名称传递给ajax响应并使用锚标记在客户端本身启用下载。
保存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;
}
在jquery中
$.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) {
}
});