MVC - 如何从URL请求和保存pdf文件

时间:2016-06-26 08:18:04

标签: c# .net asp.net-mvc api

我需要编写一个包含3个部分的api:

  1. 从pdf网址获取pdf文件。
  2. 转换pdf。
  3. 返回已转换的pdf文件。
  4. 我已经完成了第2部分和第3部分, 剩下的就是从url中获取pdf并将其复制/下载到我的mvc web api。

    这是测试html代码:

    GridView
    < script >
      $('#btnSendRequest').on('click', function() {
        $.ajax({
          type: "POST",
          url: "/Convertor/Html",
          data: {
            strUrl: "http://make-sense.co.il/kb/avcp-script-installation.pdf"
          },
          success: function(data) {
            return true;
          },
        });
      }); < /script>

    我的ActionResult函数:“convertor / html”,从网页中获取url字符串。 我需要的是当我点击按钮时,pdf文件将自动下载到我的服务器。

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
      <title>tester</title>
    </head>
    
    <body>
      <h1>tester html</h1>
      <div>
        <input id="btnSendRequest" type="button" value="SendHttpRequest" />
    
      </div>

    任何人都知道如何做到这一点? 我也读过一些名为base64编码的东西,它也可能是解决方案,但我之前从未使用过它。

    提前致谢。

2 个答案:

答案 0 :(得分:4)

您可能正在寻找的是.NET上的WebClient,请参阅以下示例,我刚从在线示例中获取它,请参阅here了解完整文章。

using System;
using System.Net;
using System.IO;

class Program
{
    static void Main()
    {
    using (WebClient client = new WebClient())
    {

        // Download data.
        byte[] arr = client.DownloadData("http://url-to-your-pdf-file.com/file1");

        File.WriteAllBytes(path_to_your_app_data_folder, arr)

    }
    }
}

您需要通过将byte []保存为某个文件来进行进一步处理。上面的示例代码适用于控制台应用程序,但同样可以在您的mvc控制器中实现。

答案 1 :(得分:-1)

            var request = System.Net.WebRequest.Create("http://make-sense.co.il/kb/avcp-script-installation.pdf");
            request.Method = "GET";

            using (var response = request.GetResponse())
            {
                using (var stream = response.GetResponseStream())
                {
                    using (var fileStream = System.IO.File.Create(@"path/to/file"))
                    {
                        stream.CopyTo(fileStream);
                    }
                }
            }