Tree
Hola buenas, una consulta como podria hacer para que en un tree, al darle click a un node me descargue un archivo.
Alguien me puede dar alguna idea de como hacer esto.
tengo el evento, lo que no se es como hacer para descargar el archivo. :S
jajaja, bueno tambien tengo respaldo pero no a la fecha los ultimos dias no hice backup, pero ni modo asi me sirve para seuir practicando xD.
Gracias Crysfel por el dato, ya lo he probado y funciona de a perlas.
yo lo que normalmente hago es simplemente hacer un document.location y listo, funciona sin problemas.
document.location = "descarga.php?file=el_id_del_file_a_descargar";
Esto provoca que aparezca el dialogo de descarga.
En tu caso el código quedaría así:
document.location = BASE_URL+'realstate/download_doc/'+nodeObj.id
Saludos
Gracias Crysfel, es una lastima que no pueda probarlo debido a que hoy en la mañana murio mi disco duro y perdi toda mi informacion, por lo que tendre que comenzar de nuevo :'(, al menos ya se como hacerlo. Gracias.
respaldo, respaldo, respaldo
:-"
yo amo estas maquinas pero no son confiables, esto me recuerda en todo caso un vídeo que vi de un tipo que le habían robado su computador y dijo "no importa con tal tengo respaldo de todo" y después cayo en cuenta que el respaldo estaba en un disco portátil en el mismo lugar de su computador por lo que también se lo robaron. plop!
Gracias Tokkaido, al final queda asi pero me bota el siguiente error:
invalid regular expression flag r
[Break On This Error] (/administrator/resources/docs/realsta...549844-Informe Bitacora Interbank.doc)
Ext.Ajax.request({
url: BASE_URL+'realstate/download_doc/'+nodeObj.id,
params: {
param1: nodeObj.id
},
scope: this,
success: function(response){
info = Ext.decode(response.responseText);
},
failure: function(response){
}
});
en tu parámetro "url" debería ir la pagina php que tiene tu función para descargar el archivo. No sé si estoy entendiendo correctamente como tienes tus archivos pero imagino que en los nodos del tree tienes los datos del archivo, así que con el ext.ajax lo que ahces es llamar a tu php y pasarle el nombre y/o ubicación del archivo que deseas descargar, no es así?
en el tree solo tengo el nombre(alias) del archivo y el id del Archivo, al hacer click en el node mando estos parametros los cuales son verificados y si concuerdan con el id del usuario manda el archivo a descargar.
el php funciona, la llamada ajax tambien esta funcionando pero en el response no manda el archivo solo un texto. no se si me explico bien, todo funciona solo que no descarga el archivo, lo he probado con un
window.open(BASE_URL+'realstate/download_doc/'+nodeObj.id); y el archivo es descargado sin ningun problema.
el response no debería hacer nada, es el php el que descarga, el ajax solo se usa para pasarle la info al php
wow entonces en que podria ser la falla?
pues como te digo si le pongo el window.open si descarga el archivo?.
podrías hacer lo siguiente, en tu nodo ejecutar una funcion con un Ext.ajax.request enviando la ruta y nombre del archivo a un archivo php donde tendrías lo sgte:
$file=basename($_POST['archivo']);
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
}
// se asegura que el archivo existe antes de enviar las cabeceras
if(!$fdl=@fopen($filename,'r')) {
die("
No se puede abrir el archivo!
"); } else { header("Cache-Control: ");// dejar en blanco para evitar errores de IE header("Pragma: ");// dejar en blanco para evitar errores de IE header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$file\""); header("Content-length:".(string)(filesize($filename))); sleep(1); fpassthru($fdl); } la ruta de tu archivo debería ser así, imaginando que tu archivo no esta en la raiz directamente sino dentro de otra carpeta: '/tu_carpeta/archivo_a_descargar.txt' espero te sea útil
No se puede abrir el archivo!
"); } else { header("Cache-Control: ");// dejar en blanco para evitar errores de IE header("Pragma: ");// dejar en blanco para evitar errores de IE header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$file\""); header("Content-length:".(string)(filesize($filename))); sleep(1); fpassthru($fdl); } la ruta de tu archivo debería ser así, imaginando que tu archivo no esta en la raiz directamente sino dentro de otra carpeta: '/tu_carpeta/archivo_a_descargar.txt' espero te sea útil
Hola Tokkaido en realidad la parte del php ya la tengo lo que me falta es por la parte del extjs, podrias darme un ejemplo de Ext.ajax.request la url de descarga seria:
BASE_URL +'realstate/download_doc/100-1
donde 100 es el id del documento y 1 es el id de la propiedad.
public function download_doc()
{
modules::run('login/index');
$RSA = $this->uri->segment(3);
$RS = explode('-', $RSA);
$cond = array(
'doc_id' => intval($RS[1]),
'doc_realstate_id' => intval($RS[2]),
'doc_owner' => $this->_pertenece
);
$query = $this->db->get_where('realstate_docs', $cond);
$row = $query->row();
header("Content-type: $row->doc_mime_type");
header('Content-Disposition: attachment; filename="'.$row->doc_file.'"');
echo base_url().'resources/docs/realstate/'.$this->_pertenece.'/'.$row->doc_realstate_id.'/'.$row->doc_file;
}
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.