Foro

Home Forums General Descargar archivos mediante peticiones ajax

This topic contains 15 replies, has 2 voices, and was last updated by Ángel Luis Sánchez Ángel Luis Sánchez 5 años, 1 mes .

Viendo 15 respuestas - de la 1 a 15 (de 16 en total)
  • Descargar archivos mediante peticiones ajax

    Intervenciones
  • Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    Hola muy buenas,
    estoy en la recta fina lde mi proyecto y me he encontrado el problema de la descarga de archivos.

    Me gustaría saber si se puede realizar una petición AJAX que te devuelva un archivo, como cuando quieres que te devuelva un json (dataType: “json”), he leído por ahí que esta el tipo (dataType: “binary”), pero nose muy bien como funciona, o como capturar lo que te devuelve.

    Estoy usando una API REST como Web Service para conectarme al servidor.
    ¿Se puede devolver un archivo por webService?
    La verdad es que no tengo mucha idea sobre esto y espero que me echéis una mano :)

    Saludos!


    dangerousdave
    dangerousdave 
    Participant

    Te puede servir el plugin: https://github.com/apache/cordova-plugin-file-transfer

     Code: ejemplo (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.

    // !! Assumes variable fileURL contains a valid URL to a path on the device,
    //    for example, cdvfile://localhost/persistent/path/to/downloads/

    var fileTransfer = new FileTransfer();
    var uri = encodeURI("http://some.server.com/download.php");

    fileTransfer.download(
        uri,
        fileURL,
        function(entry) {
            console.log("download complete: " + entry.toURL());
        },
        function(error) {
            console.log("download error source " + error.source);
            console.log("download error target " + error.target);
            console.log("upload error code" + error.code);
        },
        false,
        {
            headers: {
                "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
            }
        }
    );


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    ¿Pero como puedo conectarme con el ftp desde el móvil?, es decir, a algo como esto:

    1.  ftp://usert:login@IP/archivo.txt

    desde el navegador si puedo acceder perfectamente a esa ruta. El plugin filetransfer ya lo usaba para para guardar archivos que generaba, pero el download no se como utilizarlo para FTP.


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    Me explico mejor, yo me descargo desde mi maquina virtual un archivo alojado en ella, por ejemplo Portada.pdf

     Code: arbitrary (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    26.
    27.
    28.
    29.
    30.
    31.
    32.
    33.
    34.
    35.
    36.
    37.
    38.
    39.
    40.
    41.
    42.
    43.
    44.

    function desc(){
      window.requestFileSystem(
        LocalFileSystem.PERSISTENT,
        0,
        onRequestFileSystemSuccess,
        fail
      );
    }
                
    function onRequestFileSystemSuccess(fileSystem) {
      fileSystem.root.getFile(
        'Portada.pdf', //Portada.pdf
        {create: true, exclusive: false},
        onGetFileSuccess,
        fail
      );
    }

    function onGetFileSuccess(fileEntry) {
      var path = fileEntry.toURL().replace('Portada.pdf', ''); //Portada.pdf
      var fileTransfer = new FileTransfer();
      fileEntry.remove();
      fileTransfer.download(
        'https://IP/Portada.pdf',    
        path + 'otro.pdf',
        function(file) {
          alert('download complete: ' + file.toURI());
          showLink(file.toURI());
        },
        function(error) {
          alert('download error source ' + error.source);
          alert('download error target ' + error.target);
          alert('upload error code: ' + error.code);
        }
      );
    }
                
    function showLink(url) {
      alert("mostrar "+url);
    }

    function fail(evt) {
      alert(evt.target.error.code);
    }

    Por cierto este código siempre me ha funcionado hasta ahora jajajaj lo acabo de probar y no se porque no funciona.
    Pero nose si tendré que crearme un ftp cliente o algo por el estilo, ni idea :S


    dangerousdave
    dangerousdave 
    Participant

    Tendrías que hacer algo especial con ese archivo? o simplemente es abrirlo?? ya que con un simple enlace con “_system” el usuario lo puede abrir con su app de documentos, fotos, videos…


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    He probado a hacer en javascript

     Code: arbitrary (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.

    window.open("ftp://usert:login@IP/archivo.txt", '_system', 'location=yes');
    window.open("ftp://usert:login@IP/archivo.txt", '_system', 'location=no');
    window.open("ftp://usert:login@IP/archivo.txt", '_blank', 'location=yes');
    window.open("ftp://usert:login@IP/archivo.txt", '_blank', 'location=no');

    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>
    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>
    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>
    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>
    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>
    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>
    <a href="ftp://usert:login@IP/archivo.txt">a</a><br>

    En el navegador me funcionan correctamente, el problema esta cuando paso al móvil, que no me funciona ninguno de los ejemplos de arriba, nose que podrá ser.
    En principio me gustaría descargar los archivos, pero ni idea :(
    Saludos!


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    dangerousdave a que te refieres con lo de _system?


    dangerousdave
    dangerousdave 
    Participant

    Pues a un archivo en un servidor:

     Code: arbitrary (select
    1.
    2.
    3.

    'http://www.miweb.com/pdfs/ejemploq.pdf'

    onclick="window.open('http://www.miweb.com/pdfs/ejemploq.pdf', '_system');"

    No sé si te vale algo así… tienes que tener en el config:

    1.  <allow-intent href="http://*/*" />


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    Buenas,

    ya probé lo que me dijiste y funciona :) Eres un crack jajaja Encima me lo guarda en la carpeta descargas, lo único una cosa, ¿se le puede cambiar el nombre al archivo?
    Porque siempre me lo guarda (1).pdf, (2).pdf, (3).pdf … es decir, es como si no me devolviera el nombre del archivo y le va poniendo ese nombre porque coinciden.
    No entiendo muy bien eso. Por cierto me funciona también para otros formatos como .xls, .doc, ,txt, .docx, .pdf. Pero todos se guardan con (1), (2).
    ¿Se puede cambiar?
    Saludos!


    dangerousdave
    dangerousdave 
    Participant

    Yo lo he utilizado en un botón para descargar un catálogo en .pdf y me lo guarda con el nombre correcto… El archivo se llama info.pdf y me lo descarga como info.pdf

    No sabía muy bien si te valdría ya que como estabas con temas de ftp no entendía muy bien si lo tenía que hacer de esa forma pero vamos si es un archivo que vas a mostrar al usuario puedes hacerlo así, simplemente lo guardas en una carpeta de tu server y lo descargas.

    En principio funciona con todos los archivos y te los abre con el programa que tengas asociado o en la carpeta de descargas y en iOS los abre con la app (ahora mismo no me acuerdo como se llama, books¿?) de ios y desde ahi lo puedes guardar y demás


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    Buenas, ¿?y como puedo hacer para guardar ese archivo en mi server? Porque probé a descargarme un archivo en mi local y me lo descargaba con nombre, osea que es por el ftp. ¿Cómo puedo hacer “la copia” a una carpeta en mi server?


    dangerousdave
    dangerousdave 
    Participant

    No entiendo muy bien lo que me dices… Tu tienes tu host y metiendo con ftp creas una carpeta por ejemplo /raiz/pdfs/info.pdf y subes el archivo. Después puedes acceder a el desde un navegador o con la app


    Ángel Luis Sánchez
    Ángel Luis Sánchez 
    Participant

    No entiendo muy bien eso de metiendo con mi FTP y crear carpeta…
    Como puedo subir el archivo? es que estoy un poco verde en esto.


    dangerousdave
    dangerousdave 
    Participant

    Tu tienes un host contratado, pues tienes que tener un usuario ftp y con filezilla, por ejemplo, metes ese usuario abres la raiz y dentro buscas si tienes más proyectos en el que estés trabajando y creas la carpeta y metes el archivo.

    Si va ser un documento digamos público que la gente va poder visualizar no le pones ningún tipo de configuración a esa carpeta con el .htcaccess y a traves de el navegador poniendo la dirección verías, descargarías el archivo o con un enlace desde un botón en tu app phonegap


    dangerousdave
    dangerousdave 
    Participant

    Otra cosa sería si esos archivos tienen que estar protegidos… entonces tendría que hacer lo mismo pero poner el acceso restringido a la carpeta vía .htcaccess y ya no podría acceder mediante web ni enlaces tendría que hacer una llamada AJAX a un servicio .php y con este recuperar el archivo y traerlo via descarga ftp a la app.

    Por eso te digo que si es algo que va ser publico con subirlo a tu host y poner un enlace en tu app ya funcionaría.

    Si alguien puede aportar algo más o corregirme algo que esté indicando mal… Pero creo que estas serían las formas de hacerlo, no?


Viendo 15 respuestas - de la 1 a 15 (de 16 en total)

You must be logged in to reply to this topic.

RT @PWAExpertsIO: 🎙️ Cómo capturar 🎼 audios con tu #PWA. @JoseJ_PR te enseña cómo hacerlo a través de este #tutorial👇🏼 https://t.co/Rkpw609:57 PM Jun 8th