se modifica descarga de archivo zip

francisco/photos
Francisco Sandoval 2024-02-01 02:42:13 -03:00
parent b439ce5b4a
commit 4829634194
2 changed files with 47 additions and 20 deletions

View File

@ -1,11 +1,12 @@
<script> <script>
import Paginate from "$/components/Paginate.svelte"; import Paginate from "$/components/Paginate.svelte";
import { getGtfsArchivo,getGtfsArchivoId,getGtfsBase } from "$/services/gtfs_archivo"; import { downloadGtfsArchivo, getGtfsArchivo,getGtfsArchivoId,getGtfsBase } from "$/services/gtfs_archivo";
import PageTitle from "$/components/PageTitle.svelte"; import PageTitle from "$/components/PageTitle.svelte";
import { useLocation } from "svelte-navigator"; import { useLocation } from "svelte-navigator";
import { getPermisosPath } from "$/services/usuarios"; import { getPermisosPath } from "$/services/usuarios";
import ModalgtfsUpload from "./ModalgtfsUpload.svelte"; import ModalgtfsUpload from "./ModalgtfsUpload.svelte";
import { getRedTransporte } from "$/services/red_transporte"; import { getRedTransporte } from "$/services/red_transporte";
import { space } from "svelte/internal";
let id_red; let id_red;
let escritura = false; let escritura = false;
@ -20,7 +21,6 @@
let location = useLocation() let location = useLocation()
let loading = false; let loading = false;
let showUpload = null; let showUpload = null;
let baseGTFS=null;
getPermisosPath($location.pathname) getPermisosPath($location.pathname)
.then(data => escritura = data.escritura) .then(data => escritura = data.escritura)
.catch(error => console.log({ error })) .catch(error => console.log({ error }))
@ -31,19 +31,11 @@
.then(() => onPage(1)) .then(() => onPage(1))
.catch(error => globalThis.toast.error(error)) .catch(error => globalThis.toast.error(error))
async function rutaBaseArchivo() {
baseGTFS = getGtfsBase().replace('/api', '');
}
async function onPage(p) { async function onPage(p) {
try { try {
if (!id_red) { if (!id_red) {
return; return;
} }
rutaBaseArchivo()
loading = true loading = true
offset = (p - 1) * limit; offset = (p - 1) * limit;
const data = await getGtfsArchivo({id_red, offset, limit, ordering }) const data = await getGtfsArchivo({id_red, offset, limit, ordering })
@ -70,6 +62,13 @@
showUpload = true showUpload = true
} }
function onDownload({ id_gtfs }) {
loading = true
downloadGtfsArchivo(id_gtfs)
.catch(error => globalThis.toast.error(error))
.finally(() => loading = false)
}
</script> </script>
@ -136,7 +135,13 @@
<tr> <tr>
<td class="table-light">{offset + index + 1}</td> <td class="table-light">{offset + index + 1}</td>
<!--<td>{app.id_gtfs}</td>--> <!--<td>{app.id_gtfs}</td>-->
<td><a href={`${baseGTFS}${app.ruta_archivo}/${app.archivo}`}>{app.archivo}</a></td> <td>
{#if !loading}
<a href={"#"} on:click|preventDefault={() => onDownload(app)}>{app.archivo}</a>
{:else}
<span>{app.archivo}</span>
{/if}
</td>
<td>{app.created}</td> <td>{app.created}</td>
<td>{app.status}</td> <td>{app.status}</td>
<td>{app.vigente ? '✅':'🚫'}</td> <td>{app.vigente ? '✅':'🚫'}</td>

View File

@ -63,3 +63,25 @@ export async function deleteGtfsArchivo(id) {
if (!res.ok) throw await res.json() if (!res.ok) throw await res.json()
return res.text() return res.text()
} }
export async function downloadGtfsArchivo(id) {
const res = await fetch(`${base}/gtfs-archivo/download/?id=${id}`, {
headers: { "Authorization": `Bearer ${getToken()}` }
})
if (!res.ok) throw await res.text()
const filename = res.headers.get('content-disposition').split('filename=')[1].replace(/\"/g,'');
const blob = await res.blob()
const url = URL.createObjectURL(blob);
// Crear un enlace <a> para simular la descarga
let enlaceDescarga = document.createElement('a');
enlaceDescarga.href = url;
enlaceDescarga.download = filename; // Establece el nombre del archivo
enlaceDescarga.click();
// Liberar la URL del Blob una vez que se haya completado la descarga
URL.revokeObjectURL(url);
enlaceDescarga.remove()
}