Newsgroup: it.comp.lang.javascript
Titolo: test esistenza file jquery-ajax

Prima di inserire una immagine a video vorrei testare in una cartella sul 
server si si tratta di jpg, gif o png..
Come � possibile farlo con jquery?
Grazie a chi potr� consigliarmi un link per vedere coem fare.
Saluti
Leo

 Grazie a chi potrà consigliarmi un link per vedere coem fare. 
è una cosa che devi fare lato server, al massimo con jquery (o javascript 
+ in generale) puoi fare una richiesta ajax al server, ma mi sembra un 
girarrosto.


In PHP non ci sono problemi, ma essendo in javascrpt-jquery forse esiste 
qualcosa di apposito.
Grazie
Leo

 qualcosa di apposito.
Il vecchio saggio dice "the right tool for the right job" ... che senso 
ha dal client andare sul server a recuperare una immagine per sapere che 
estensione ha, per poi tornare al client e da lì richiedere l'immagine al 
server (immagino tramite un semplice immagine.src="path" ?)
Se spieghi il contesto in cui ti trovi magari riusciamo a capire meglio e 
a consigliarti meglio.

 ha scritto nel messaggio 
news:huq73r$e6n$3...@news.eternal-september.org...

Ok.
Ho una galleria fotografica in cui file grafici vengono inseriti da pannello 
di controllo.
Ad ogni record (ID record) corrisponde una immagine grafica.
L'ideale sarebbe di inserire in un campo del record l'estensione del file 
grafico (lettura allo upload) in modo che alla rilettura del record sappiamo 
anche l'estensione del file.
Ma poichè il database già esiste, fatto da altri, che non avevano 
predisposto questo ma solo file jpg; prima di metterci le mani sopra (al 
database) mi chiedevo se era facilmente testabile l'esistenza di un file con 
ajax (del tipo  file_exists di PHP).
Saluti
Leonardo

 con ajax (del tipo  file_exists di PHP).
Testare se esiste e` facile: fai una richiesta all'URL e controlli l'error 
code (404 = non esiste, 200 = esiste), esattamente come una pagina web.
Ma tu stai chiedendo di capire in che formato e` il file, e questo lo fai 
solo aprendo il file e controllando i primi byte.
Siccome il file e` sul server, e js e` sul client, se lo vuoi fare in js 
devi prima scaricare il file dal server, poi analizzarlo (con js...) e 
dai magic bytes capire in che formato e`.
E` molto piu` comodo usare PHP sul server. Puoi anche fare direttamente
<?php echo json_encode(getimagesize($nomeimmagine)); ?>
e farti dare l'array completo dei risultati (con x, y, tipo, mime, ecc.)
Bye.

 
secondo me quello che vuoi fare è un pò un accrocchio o cambi la logica
e il db oppure cambi l'upload e fai convertire tutto in jpg.

 con ajax (del tipo  file_exists di PHP).
ribadisco: devi farlo lato server, non capisco perchè tu voglia per forza 
passare dal js.

 ha scritto nel messaggio 
news:huq8md$55n$3...@tdi.cu.mi.it...

Perchè con quei file grafici ci sono delle gallerie di immagini scritte in 
javascript.
Il DB è strutturato così:
Tabella e sottotabella 1-M (Ta  e Tb)
Nella tabella (Ta) c'è la descrizione del gruppo di articoli (e della 
galleria di immagini) e nella sottotabella (Tb) il dettaglio di ciascun 
artiicolo. Le immagini sono in una cartella del server, Ciascuna immagine ha 
per nome l'ID primario della tabella (Tb)  (della parte Molti)
Per cui leggendo l'ID del record della tabella primaria (Ta) conosciamo 
tutti gli articoli che faranno parte della galleria di immagini.
(Tutti i record di Tb che come ID secondario hanno l'ID primario della 
cartelal (Ta)
A suo tempo furono previste solo immagini jpg, adesso devono essere inserite 
le gif, ma non in alternativa, bensì mescolate secondo le necessità perchè 
saranno gif animate. (fanno vedere il funzionamento dell'articolo).
L'idea è testare, al caricamento dei file grafici nella galleria, se sono 
gif o jpg e farli vedere correttemente. Non esisterebbero possibilità di 
errori nella pagina web perchè con lo upload possono essere caricati solo 
jpg ed adesso anche gif.
Ciao
Leo

 solo aprendo il file e controllando i primi byte.
No, beh, questo può farlo semplicemente controllando il Content Type.
Fa una richiesta HEAD e vede un po' che gli ritorna.
Ma credo comunque, che quello che voglia fare l'OP sia ciò che dicevi
tu prima: ovvero controllare se un file esiste o meno sul server.
Metti caso che l'immagine si chiami "foo". Quello che vuole vedere è:
- foo.jpg esiste? Si, invia quella.
- No? allora invia foo.gif.
Se assumiamo che dato un nome deve esistere un immagine associata.
Ma anche detto ciò, e qui mi rivolgo all'OP, JavaScript non è affatto
lo strumento giusto per questo compito.
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 tutti gli articoli che faranno parte della galleria di immagini.
Perfetto. Ma nella cartella del server, queste immagini, hanno una
qualche l'estesione?
Intendo dire, sono salvati come "12345.jpg" o solo come "12345"?
Perché nel secondo caso, il server non saprà che Content Type dare
e la invierà come text/plain. Ovviamente puoi fidarti del "loader"
di immagini del browser, che nella maggior parte dei casi, è smart
abbastanza da capire di che formato si tratta e visualizzarlo come
si conviene.
Ma se così è, a cosa ti serve capirne il formato da JS, se tanto è
visualizzata in ogni caso dal browser?
Se invece si tratta del primo caso, lo risolvi server side, avendo
una pagina che richiederai con una url tipo:
	get-image.php?id=12345
e PHP verificherà se esiste 12345.jpg, e ti ritornerà quella, o se
esiste 12345.gif. In caso non esista nessuna delle due, un bel 404
come risposta.
Ma magari non ho compreso bene la tua casistica.


 ha scritto nel messaggio 
news:4C112864...@ID-171124.news.individual.net...

No, hai comprteso benissimo.
Mi occorre uan chiamata ajax.
Grazie
Leo

 Mi occorre uan chiamata ajax.
Sarebbe come dire "Dottore, mi serve un'operazione".. Prima va capito
il problema, magari quel che ti serve � un'aspirina.
Tu hai detto che il DB non lo puoi toccare; ma da come rispondi, pare
che tu non abbia proprio accesso al server in nessun modo.
Ma ricordati che client e server sono complementari. Ci sono cose che
vanno fatte lato client e altre che vanno fatte lato server.
Inoltre, le chiamate HTTP, soprattutto per via del latency che hanno,
andrebbero sempre ridotte il pi� possibile.


 una richiesta HEAD e vede un po' che gli ritorna.
Non e` detto.
Se l'immagine non ha estensione sul server, molti server web non 
ritornano il content-type corretto, limitandosi a un text/plain o a un 
application/octet-stream.
Tutti i browser, d'altra parte, se vedono qualcosa dentro un <img> lo 
considerano immagine e analizzano i magic bytes (o passano direttamente 
l'immagine alla libreria di rendering che usano e lasciano fare a lei).
Praticamente tutti i siti che faccio funzionano cosi`, visto che salvo le 
immagini in /data/nometabelladb/id/numeroimg/thumbsize senza 
estensione. :)
Bye.

 ha scritto nel messaggio 
news:4C11654F...@ID-171124.news.individual.net...

No, lo posso anche cancellare e riscrivere completamente ma non mi pare il 
caso.
:-)))
Ciao
leo

 estensione. :)
Io ho smesso da un po' di fare siti web, ma questa è una pratica per cui
non impazzisco. Preferisco avere sempre il corretto Content Type, in più
è buona abitudine usare il vecchio adagio "fidarsi è bene ma non fidarsi
è meglio" quando si tratta di client side. :)


 strumento giusto per questo compito.
Con un paio di righe di configurazione del web server di dovrebbe 
risolvere.
Con Nginx, ad esempio:
...
location ~* \.(jpg|jpeg)$ {
    root ...;
    try_files $request_filename $1.gif;
}
Ciao  Manlio

 è meglio" quando si tratta di client side. :)
Nemmeno a me. Infatti quando l'ho fatto pensavo che Apache prendesse i 
magic number invece dell'estensione, quindi ho proceduto come un treno, 
vedendo che funzionava con tutti i browser.
Il prerequisito era "l'utente puo` caricare qualsiasi formato (supportato 
da PHP per le thumbnail)", quindi togliere l'estensione e non 
preoccuparsene e` stato piu` semplice che inserire un controllo che a 
ogni chiamata di thumbURL() (la funzione che genera e "cacha" la thumbnail 
e restituisce l'URL alla view) controllasse con che estensione era 
caricata la singola immagine.
Salvarle nel DB non era un'opzione per questioni di prestazioni (numero 
variabile di img e subquery relative nel DB) oltre che di allineamento: 
col metodo attuale faccio un "find .../data -name "thumb*" -exec rm {} 
\;" per rimuovere tutti i thumbnail e farglieli rigenerare man mano che 
la gente accede. Se li avessi nel DB dovrei anche svuotare la relativa 
tabella, con i rischi di concorrenza relativi.
Riassunto: devo vedere se Apache ha un modulo mime piu` intelligente, e 
se le prestazioni sono adeguate. :)
Bye.