如何通过浏览器保存使用Aspose生成的文件?

问题描述 投票:0回答:1

最近我在做Aspose,遇到了这个问题。 我正在使用 .NET Framework 4.8 和 Aspose.Cells 24.4.0 我可以将文件直接保存在本地驱动器中,但无法通过浏览器保存。 我想知道如何修复它,我需要在前端做一些事情吗?

下面是我的代码:

我正在使用AJAX来发布formdata,以便可以获得我需要的参数。 **.cshtml **

@section forms {
    @using (Ajax.BeginForm("Create", "UserExport", null, new AjaxOptions
    {
        OnSuccess = "alertSuccess"
    }, new { id = "frmExport" }))
    ...
    ...
}

控制器中调用函数 用户导出控制器.cs

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Create(UserExportModel form, IEnumerable<HttpPostedFileBase> uploader)
{
    using (UserExportDac dac = new UserExportDac(GetLoginUser()))
    {
        IList<UserModel> userList = dac.ReadAll();
        if (form.isExcel == "Y"){
           dac.ExportExcel(userList);
        }
        
        ...
        ...
        return Json(new { message = "Generatedd file successfly!" });
    }
}

使用Aspose UserExportDac.cs

 public void ExportExcel(IList<UserModel> userList)
 {     
     Workbook workbook = new Workbook();

     int index = workbook.Worksheets.Add();
     Worksheet worksheet = workbook.Worksheets[index];

     worksheet.Name = "EMP_USER";

     // Generate the content...
     ...
     ...

     **// This work when I try saving in my local downloads**
     // string filePath = System.Environment.ExpandEnvironmentVariables("%userprofile%/downloads/") + "EMP_USER_COPY.xls";
     // workbook.Save(filePath);

     // Below sample is query from the web, but didn't work me
     MemoryStream memoryStream = new MemoryStream();
     byte[] bytes = ms.ToArray();

     HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
     response.Content = new ByteArrayContent(bytes);
     response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
     response.Content.Headers.ContentDisposition.FileName = "EMP_USER_COPY.xlsx";
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("Application/x-msexcel");
     workbook.Save(HttpContext.Current.Response, "EMP_USER_COPY.xlsx", Aspose.Cells.ContentDisposition.Attachment, new OoxmlSaveOptions(Aspose.Cells.SaveFormat.Xlsx));
     HttpContext.Current.Response.End();
 }

所以目前我陷入了保存步骤。 任何建议将不胜感激,谢谢!!

aspose
1个回答
0
投票

您可以尝试以下任一代码片段:

Workbook workbook = new Workbook();

int index = workbook.Worksheets.Add();
Worksheet worksheet = workbook.Worksheets[index];

worksheet.Name = "EMP_USER";

// Generate the content...
...
...

//Send workbook to response
workbook.Save(HttpContext.Current.Response, "EMP_USER_COPY.xlsx", ContentDisposition.Attachment, new OoxmlSaveOptions(SaveFormat.Xlsx));
HttpContext.Current.Response.End();

Workbook workbook = new Workbook();

int index = workbook.Worksheets.Add();
Worksheet worksheet = workbook.Worksheets[index];

worksheet.Name = "EMP_USER";

// Generate the content...
...
...

//Send workbook to response
OoxmlSaveOptions xSaveOptions = new OoxmlSaveOptions(SaveFormat.Xlsx);

MemoryStream ms = new MemoryStream();
workbook.Save(ms, xSaveOptions);

//set the position.
ms.Position = 0;

this.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
this.Current.Response.AddHeader("content-disposition", "attachment; filename=EMP_USER_COPY.xlsx");
Response.BinaryWrite(ms.ToArray());
Response.End();

请参阅文档以供进一步参考。如果您仍然发现任何问题,请告诉我们。

PS。我在 Aspose 担任支持开发人员/布道者。

© www.soinside.com 2019 - 2024. All rights reserved.