por mvc descargar asp.net-mvc-3 jquery

asp.net-mvc-3 - mvc - return file jquery



Llamada JQuery Ajax para descargar el archivo PDF (3)

No debe usar AJAX para descargar archivos. Esto no funciona Dicho esto, te quedan 2 opciones:

  1. acción de enlace y parámetros de cadena de consulta o si la descarga debe ser trigerred en algún evento de JavaScript específico, también puede establecer window.location.href a la acción que se supone que genera el archivo PDF y pasar los parámetros de cadena de consulta a la misma.

  2. o si tiene miedo de que tenga muchos datos para pasar a la acción del controlador que generará el PDF para descargar, use un <form> con method="POST" y dentro de usted use campos ocultos para almacenar tantos parámetros y datos como te gusta:

    @using (Html.BeginForm("download", "home")) { ... hidden fields containing values that need to be sent to the server <input type="submit" value="Download PDF" /> }

Mi pregunta es similar a Descargar y abrir archivo pdf usando Ajax

Pero no exactamente igual, la razón por la que quiero un JQuery ajax es que mi archivo se genera dinámicamente a partir de los datos que se obtendrían de la misma página.

Así que, básicamente, tengo un objeto Json que debe enviarse al servidor que generará dinámicamente un archivo y lo enviará de vuelta al navegador.

No me gustaría utilizar cadenas de consulta en un anclaje con mi objeto Json corregido, ya que creo que sería una amenaza potencial ya que las cadenas de consulta tienen restricciones de caracteres (¿estoy aquí?).

Por favor, avíseme si mi flujo de trabajo es correcto o si puedo lograr lo mismo utilizando un flujo diferente.


En lugar de hacer una llamada más ajax en su página, puede usar la etiqueta de anclaje y la descarga de fuerza php para realizar la descarga de PDF

HTML <a href="www.example.com/download_file.php?file_source=example.pdf">Download pdf here</a> PHP <?php $fullPath = $_GET[''fileSource'']; if($fullPath) { $fsize = filesize($fullPath); $path_parts = pathinfo($fullPath); $ext = strtolower($path_parts["extension"]); switch ($ext) { case "pdf": header("Content-Disposition: attachment; filename=/"".$path_parts["basename"]."/""); // use ''attachment'' to force a download header("Content-type: application/pdf"); // add here more headers for diff. extensions break; default; header("Content-type: application/octet-stream"); header("Content-Disposition: filename=/"".$path_parts["basename"]."/""); } if($fsize) {//checking if file size exist header("Content-length: $fsize"); } readfile($fullPath); exit; } ?>

Estoy comprobando el tamaño del archivo porque si carga el pdf desde la nube de CDN, no obtendrá el tamaño del documento que obliga al documento a descargarse en 0kb. Para evitarlo, estoy comprobando con esta condición

if($fsize) {//checking if file size exist header("Content-length: $fsize"); }

Yo también estaba luchando con este problema, el código anterior funcionó para mí, espero que ayude


Tengo una respuesta muy segura. No puede descargar archivos PDF mientras usa la solicitud ajax al servidor. Entonces, en lugar de eso, debes usar html actionlink. por ejemplo

@Html.ActionLink("Convert Data into PDF", "PDFView", null, new { @class= "btn btn-info" });

El código anterior generará un botón de enlace y puede acceder al Método de acción del controlador. También puede usar cualquier técnica para devolver un archivo PDF desde el controlador, por ejemplo, puede devolver el archivo PDF utilizando la clase FileResult .