从API获取word文档并下载它

时间:2016-05-27 13:25:34

标签: c# asp.net

我有第三方API。当我打电话给api时,它会输出一个word文档。

在我的.net网站上,我有一个ASPX页面。当用户浏览该页面时,我必须调用该第三方API,获取word文档,并将其作为可下载的word文档发送给用户。

注意: 出于安全原因,我无法使用javascript调用第三方API。

我试过下面的代码

    WebClient wClient = new WebClient();
    var pagesource = wClient.DownloadString("3rd party api");

    Response.Clear();
    Response.AddHeader("Content-Type", "application/msword");
    Response.AddHeader("Content-Disposition", "attachment; filename=test.docx");
    Response.Write(pagesource);
    Response.End();

下载word文档。但是当我打开它时,它已经被破坏了。

2 个答案:

答案 0 :(得分:1)

我相信wClient.DownloadString将以字符串形式下载文档。您希望使用.DownloadData将数据作为字节数组(二进制)获取。然后是:

        var fileBytes = wClient.DownloadData("3rd party api");;

        if (fileBytes == null) return;

        string filename = DateTime.Now.ToString("yyyy-MM-dd") + "-filename.docx";

        Response.Clear();
        Response.AddHeader("Content-Length", fileBytes.Length.ToString(CultureInfo.InvariantCulture));
        //Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", filename)); // save file as attachment
        Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", filename)); // display inline in browser
        Response.AddHeader("Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        Response.BinaryWrite(fileBytes);
        Response.Flush();
        Response.End();

答案 1 :(得分:0)

非常确定您的mime类型对于docx不正确。您使用的是.doc。

尝试

Response.AddHeader("Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");