微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 .Net Core 中提供使用 OpenXML SDK 创建的可下载 docx 文件

如何解决如何在 .Net Core 中提供使用 OpenXML SDK 创建的可下载 docx 文件

在我的 .net core 2.2 MVC Web 应用程序中,我目前正在使用 OpenXML SDK Productivity Tool 生成一个 .docx 文件

目前,当用户在我的视图上填写表单并点击提交时,将触发 OpenXML 代码生成word 文档,并通过电子邮件发送给用户。我现在需要的是可供该用户下载的 word 文档文件

我不确定如何重新编写代码以使其正常工作。下面是我的 [HTTPPost] 方法

[HttpPost]

public ActionResult AddReferralForm(ReferralForm referralForm)

{

try

{

//generate word document of the referral form

var GeneratedClassOpenXML = new OpenXMLGeneratedClass();

var wwwRoot = _env.WebrootPath;

string constructedFilename = DateTime.Now.ToString("yyyyMMdd") + "_"+ DateTime.Now.ToString("HHmm") + "_";

string fileName = referralFormsLocation + constructedFilename+".docx";

 
var emailaddresstoSendForm = _context.ReferralFormEmailAddresses.FirstOrDefault();

//Generate Word Document referral form - uses Open XML SDK

GeneratedClassOpenXML.CreatePackage(fileName,referralForm,LoggedInUser,emailaddresstoSendForm.EmailAddress);

//method for user to download the word doc
ExportReferral(fileName);



return RedirectToAction("Index","Home",new { id = LoggedInUser.Id });

}

catch (Exception ex)

{

throw new Exception("Error when saving a referral - " + ex);

}

}

方法用户重定向Home/Index生成的 Word 文档的电子邮件GeneratedClassOpenXML.CreatePackage() 内。

我认为这样的代码可以工作,上面的 HTTPPost 方法调用了它,但这不起作用:

[HttpGet]       
public IActionResult ExportReferral(string filePath)
{
    var x = System.IO.File.ReadAllBytes(filePath);

    return File(System.IO.File.ReadAllBytes(filePath),contentType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",fileDownloadName: "MySheet.docx");

}

我正在尝试寻找一种方法用户返回主页并返回文件内容。有什么办法可以实现吗?

谢谢

解决方法

使用路径重定向到主页

[HttpPost]
public ActionResult AddReferralForm(ReferralForm referralForm)

{

   //Generate Word Document referral form - uses Open XML SDK
   ...
   redirect home/index with fileName 
   return RedirectToAction("Index","Home",new { id = LoggedInUser.Id,file= fileName });

}

索引.cshtml

<!-- you can have your own style -->
<style>
    /* dialog div must be hidden */
    #basicModal {
        display: none;
    }
</style>


<div id="basicModal">
    Confirm to download ?
</div>


<script>
    $(document).ready(function () {
        const urlParams = new URLSearchParams(window.location.search);
        const downloadUrl = urlParams.get('file');

        //window.location = downloadUrl;
        if (downloadUrl != null) {
            $("#basicModal").dialog({
                modal: true,title: "Are you sure?",buttons: {
                    "YES": function () {
                        window.open(downloadUrl,'_blank');
                    },"NO": function () {
                        $(this).dialog("close");
                    }
                }
            });
        }

    });
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。