2014-07-19 25 views
11

Ho un sito in cui viene richiesto agli utenti di scaricare file da risorse esterne. Poiché i nomi dei file esterni vengono sottoposti a hash e l'utente scarica più file, è molto difficile per gli utenti sapere quale file scaricano per raggiungere la risorsa richiesta. Ad esempio, il nome file di fdae442dafe42.zip potrebbe essere production-resources.zip.Scarica risorse esterne - Rinomina file

Sto cercando modi per averlo in modo che il browser scarichi il file come un nome diverso. Di seguito sono alcune delle mie idee e perché non funzioneranno, ma potresti essere in grado di trovare una soluzione alternativa.

Solo una nota, non ho alcun controllo sulla risorsa esterna. Non sarò in grado di apportare modifiche alle intestazioni o altro. Il mio servizio è un sito web che si rivolge principalmente agli utenti desktop. Le soluzioni Android e iOS non saranno così vantaggiose.

Scarica attributo

Questo metodo stava lavorando per un po 'in Google Chrome e Firefox, ma poi hanno iniziato a seguire il W3 HTML5 spec. La risorsa esterna richiede di inviare l'intestazione di Content-Disposition in cui Google Chrome e Firefox non hanno verificato prima.

PHP proxy scaricare

So che avrei potuto avere uno script PHP effettua una richiesta alla risorsa esterna e poi consegnarlo al cliente finale, mentre la modifica delle intestazioni e il nome per soddisfare le mie esigenze. Il problema è che il sito ha un traffico elevato e ogni utente scarica circa 1-2 GB di dati. I miei server non sono in grado di gestire questo tipo di traffico e l'aggiornamento del server sarà probabilmente troppo costoso.

File Rename con applicazione esterna

stavo considerando usando un programma esterno (forse un estensione Chrome/Firefox) che rinominare i file al termine della download. Ma considerando che un numero abbastanza grande del mio pubblico sono visitatori una tantum, chiedere loro di scaricare un'applicazione o un'estensione è molto improbabile.

Flash o Java Soluzioni integrate

Sto pensando di utilizzare un file Java o Flash incorporato che consente di gestire i download di file, ma io non ne so abbastanza su entrambe le piattaforme. Da quello che posso dire, Flash non ha molto controllo sul file system dell'utente, quindi questo potrebbe essere un problema. Java sarà in grado di svolgere questo compito, ma speravo davvero che non avrei dovuto usare Java poiché è spesso insicuro e richiede un grande download per installarlo (lo stesso problema dell'idea del software esterno).


Se avete qualche idea su cosa potrei fare per risolvere questo problema, sarebbero molto apprezzati. Non sto cercando alcun codice, solo idee su come sarò in grado di svolgere il compito di cui sopra. Vorrei ringraziarvi tutti per il vostro tempo e competenza.

+8

Vorrei votare per chiudere questa domanda in quanto basata principalmente su opinioni; le risposte a questa domanda non risolveranno il problema, ti daranno solo e chi troverà questa domanda in futuro ancora più cose a cui pensare. Sfortunatamente, ha una taglia aperta, e come tale non può essere votato per la chiusura. –

+3

Non sto chiedendo se la Soluzione 1 sia migliore della Soluzione 2. Tutte le soluzioni disponibili al momento non hanno funzionato. Sto cercando una soluzione per il problema che sto avendo, non un'opinione su quale soluzione dovrei usare, dato che al momento non ce ne sono. – David

+0

Gli utenti scaricano i file "in modo casuale" (di loro scelta, _Voglio file 'pippo' e' bar', non mi importa del resto solo adesso_), o devono scaricare file/risorse 'A' , 'B' e' C' per completare una sorta di "pacchetto" con cui possono lavorare successivamente? (quindi basicamente funziona su un elenco di file e li metto tutti) – CBroe

risposta

1

A cosa si riferisce questa risorsa esterna?

Se si tratta di S3 di Amazon, consente di generare URL di download e specificare lo Content-Disposition che dovrebbe essere presente nella risposta dal proprio server al momento del download. Qui puoi codificare il nome del file che il browser deve utilizzare per salvare il file.

Se si tratta di un altro servizio, dare un'occhiata alla sua documentazione, forse ha funzionalità simili.

0

Se stai autenticato sul server di destinazione tramite Access-Control-Allow-Origin allora forse unendo questi due metodi vi aiutano a:

How to set custom http headers when changing iframe src?

$.ajax({ 
    type: "GET", 
    url: "https://app.icontact.com/icp/a/", 
    contentType: "application/json", 
    beforeSend: function(xhr, settings){ 
      xhr.setRequestHeader("some_custom_header", "foo");}, 
    success: function(data){ 
     $("#output_iframe_id").attr('src',"data:text/html;charset=utf-8," + escape(data)) 
    } 
}); 

JavaScript/jQuery to download file via POST with JSON data

$.post('/create_binary_file.php', postData, function(retData) { 
    $("body").append("<iframe src='" + retData.url+ "' style='display: none;' ></iframe>"); 
}); 
0

Utilizza l'attributo "download" del tag "a".

<a href="http://external.server/path/to/file" download="name_you_want.ext">download</a> 

Questo dovrebbe funzionare con i più recenti Chrome e Firefox, ma non funziona su IE.

+0

E non con Safari. – idmean

+4

Questo non funziona nemmeno all'interno di Chrome o Firefox. Se puoi fornire un esempio funzionante, allora accetterò questo. Ecco il mio esempio di esso non funziona in Chrome 36 - http://jsfiddle.net/4AX42/ – David

+1

oops, ho controllato di nuovo il documento, su https://developer.mozilla.org/en-US/docs/Web/ HTML/Elemento/a, il download è disponibile per blob: URL o dati: solo URL. Quindi volevo caricare l'url tramite XMLHttpRequest come dati binari e poi convertirlo in URL dati da URL.createObjectURL, ma ho sofferto del problema interdominio. Quindi, sembra una missione impossibile, mi dispiace. – 600MHz