martedì 1 settembre 2009

Come fare l'upload su Aruba di file superiori ai 4 MB?

Questa domanda ha popolato migliaia di thread nei Forum per Webmaster più famosi in rete...e la risposta è una...CERTO CHE SI PUO'!!!

Cercando bene nel "vademecum" di Aruba, si può trovare un fantastico zip da scaricare che contiene un sacco di cosette utili per chi sviluppa siti hostati su Aruba, programmando in ASP o ASP.net.

Questi script sono stati creati da Persits e sono semplicissimi da utilizzare e molto efficaci.
Nel file che trovate su Aruba (a questo indirizzo) , trovate quattro componenti, chiamati:

- AspEmail , componente che si affianca a Cdosys e consente l'invio di mail con varie opzioni. Usato in congiunzione con AspUpload rende molto facile l'invio di allegati via mail tramite pagina web
- AspUpload, componente per facilitare l'invio di files tramite form. Molte le opzioni, possibilita' di salvare il file su disco o su database.
- AspJpeg, componente per la manipolazione "al volo" delle immagini : dimensionare, ruotare, crop, risoluzione, salvataggio in database.
- AspPdf, componente per la creazione "al volo" di files PDF, la sorgente puo' essere un file di testo, un'immagine, una pagina web, un form, ecc. ecc

All'interno trovate un sacco di esempi.

In questo post stiamo parlando però di upload di file di qualunque dimensione, quindi vi descrivo come farlo:

Per prima cosa inserite nella cartella "CGI-BIN" del vostro spazio Aruba, la .dll chiamata "ASPUPLOADLib.dll", che trovate nello zip.

Poi avrete una vostra form con la quale caricare il file tipo:

<form enctype="multipart/form-data" method="post" action="Upload.asp">
<input type="file" name="file">

<input value="Carica il file" type="submit">
</form>

la pagina upload.asp, sostanzialmente dovrà contenere 2 sole righe:

Set Upload = Server.CreateObject("Persits.Upload")
Upload.Save(Server.MapPath("/public")) 'qui impostate il percorso dove finirà il file
response.write "File caricato con successo!"

e con queste sole due righe, voi potrete caricare sul vostro server file di qualunque dimensione!!

Se poi avete bisogno di ricavare il nome del file, magari per inserirlo nel vostro database, aggiungete queste righe:

Set File = Upload.Files("file") ' qui metterete al posto di "file", il nome della input che avete nella vostra form dove caricate il file

If Not File Is Nothing Then
filename=File.FileName
end if

ed ecco che la variabile "filename" conterrà il nome del file completo di estensione.

Infine, se avete la necessità di rinominare il file, potete mettere queste righe:

Set File = Upload.Files("file") ' qui metterete al posto di "file", il nome della input che avete nella vostra form dove caricate il file

If Not File Is Nothing Then
filename=File.FileName

nuovo_filename="testo_"&filename&""
Dim fsoMyFile
Set fsoMyFile = Server.CreateObject("Scripting.FileSystemObject")
fsoMyFile.MoveFile (Server.MapPath("/public/"&filename&"")), (Server.MapPath("/public/"&nuovo_filename&""))
Set fsoMyFile = nothing

end if


ed il gioco è fatto!!

Spero possa esservi utile.

59 commenti:

  1. Ciao! Già che capito a leggere questa cosa ti pongo un quesito! :D Devo fare il "contrario" di quello che hai descritto tu!!! :D
    Io ho uno spazio su aruba e e sono correttamente installati i componenti persits. C'è qualche modo per poterli usare in locale? Ho provato a copiarmi le dll dalla cartella cgi-bin di aruba e a registrarla sul mio computer con il comando "regsvr32" ma mi viene restituito errore. ora sto usando la versione trial proprio di aspUpload scaricata dal sito ufficiale ma mi interesserebbe poterla usare anche in locale dato che sviluppo prima localmente anche scaduti i 30 giorni.
    Sai darmi un consiglio?

    Grazie mille!

    RispondiElimina
  2. Ciao sto testando proprio ora, se funziona è veramente una figata (scusa il francesismo!)
    Sai per caso se è possibile unire questo upload ad un sistema di upload multiplo come uploadify?
    Sarebbe una figata spaziale che risolve i problemi dell'umanità
    ciao Daniele :-)

    RispondiElimina
  3. come non detto ho appena testato lo script ma aruba da erooore.
    Active Server Pages error 'ASP 0113'

    Script timed out

    /public/Upload.asp

    The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.

    RispondiElimina
  4. Ciao,

    ovviamente, come suggerito dall'errore, per fare un'upload di file così grandi, potresti avere bisogno di impostare il Timeout un po' più alto di quello di default.
    Quindi come prima riga metti, all'interno del codice ASP:
    server.ScriptTimeout=60000

    Il numero indica la durata massima dell'esecuzione degli script nella pagina.
    Ovviamente si può anche fare l'upload multiplo!

    RispondiElimina
  5. Fantastico ho caricato un file da 200mb senza problemi, per caso hai anche una soluzione per l'accodamento dei file? come uploaddify.com?
    grazie

    RispondiElimina
  6. Se intendi per accodamento, l'upload multiplo, nello zip di Persits, troverai un sacco di esempi per fare l'upload multiplo, e volendo per vedere anche la progressione dell'upload con la barra di caricamento.
    Se intendi altro, fammi sapere, perché non conosco Uploadify...ma magari è una cosa interessante ed ha funzioni interessanti da implementare anche per questo script.

    RispondiElimina
  7. Gli esempi li ho visti, ma non ho visto nulla di veramente comodo come questo, se hai tempo/voglia, prova ad andare qui: http://www.uploadify.com/demos/
    e schiacciare il SELECT FILE di Custom Demo (per intenderci l'esempio sotto), mette in queue i file e li carica. Praticamente tu selezioni 50 file, te ne vai a bere il caffè e lui si arrangia, come se stessi usando un FTP con la comodità dell'implementazione web pertanto usabile da tutti.
    Cosa ne pensi?

    RispondiElimina
  8. dimenticavo.. l'unico difetto che ho trovato (ma magari è colpa mia) è l'impossibilità di caricare file di grandi dimensioni, che reputo indispensabile chiaramente.

    RispondiElimina
  9. Sì in effetti è una funzione comoda. Infatti, la prima cosa che mi è saltata all'occhio quando ho guardato il link che mi hai dato, era proprio quell'opzione.
    Comunque non esiste questo problema con la libreria Persits...nel senso che tu puoi anche metterne 200 di file...perché puoi fare l'upload multiplo, con la barra di progressione dell'upload...e quindi puoi comunque andarti a bere il caffè!
    Non so se hai visto la parte di upload multiplo negli esempi, ma se vuoi ti preparo un link per vedere come funziona.

    RispondiElimina
  10. Ciao ma con upload multiplo intendi la manipolazione per inserire più elementi di select nella pagina oppure le soluzione Java fornite dal sito? (perchè non mi sembrano ottimali come uploadify)

    Comunque è ottimo, sto testando su IIS6 di Vista ma non so caricare la DLL, tu sai come si fa?
    Grazie ancora per l'aiuto

    RispondiElimina
  11. No per Upload multiplo intendo la possibilità proprio di caricare contemporaneamente più file. Al posto di avere una sola input di tipo "file", ne hai quante vuoi e quindi selezioni tutti i file che vuoi caricare..che verranno quindi "accodati" come intendevi tu...e potresti quindi andare a bere il famoso caffè, mentre lo script carica tutti i file che gli hai indicato.
    Poi ovviamente nella form puoi anche inviare tutti gli altri elementi che ti servono con altri tipi di input (con tutti gli altri tipi...text, checkbox, select...ecc).

    Per metterti la libreria in locale, mi sa che devi acquistarla e poi registrarla come le normali DLL.

    RispondiElimina
  12. Mi sono creato due file che "enveloppano" tutte le possibilità in un unica funzione, e mi sembra ottimo, mi manca solo il resize in pixel, sul sito vedo solo la possibilità in percentuale, hai per caso provato tu?

    Questi upload multipli non sono bellissimi con tanti imput, perchè è vero che puoi selezionarli e lasciarli andare... ma devi riempire ogni singolo campo... mentre per l'uso in locale non sono sicuro che vada acquistata bensì credo basti conoscere IIS per istruirlo a leggere quelal DLL ma onestamente non so come si fa.

    RispondiElimina
  13. Beh io ho messo lo script che fa il resize moltiplicando e dividendo per 4, ma ovviamente puoi benissimo farti una piccola procedura, con la quale calcoli in proporzione l'altra misura dell'immagine e crei l'immagine esattamente come la vuoi.
    Lo script dopo aver estratto le due misure originali, ti chiede le due misure che vuoi dargli...quindi ovviamente puoi fare di tutto..sia dargli a priori le misure che vuoi, sia dargliene una e fargli calcolare l'altra in percentuale, sia fare un resize direttamente in percentuale...fai tutto ciò che vuoi.

    Poi ovviamente mi farai dare uno sguardo al tuo script????...magari facciamo un bel post con la demo del tuo lavoro???...se ti va e se non hai già un tuo Blog o altro dove pubblicarla!

    RispondiElimina
  14. Ciao ti allego molto volentieri quello che ho realizzato.
    Praticamente ho enveloppato quasi tuto quello che mi serviva in un unica funzione.
    Dal numero di input da generare dinamicamente al resize con tanto di box di caricamento etc.
    Mi manca l'upload con resize + stampa del logo (tipo wathermask).

    ecchitello:
    http://rapidshare.com/files/431237391/ASPUpload-CsDragon.rar

    fammi sapere se ti piace, ciao CsD

    RispondiElimina
  15. ok ho finito ho fatto una nuova versione aggiungendo anche il Watermark, nella versione che ti ho linkato c'è anche un bug di ridimensionamento... va be cmq per farti vedere quello che ho fatto
    ciao

    RispondiElimina
  16. Complimenti!
    Molto ultile...sai quanti cercano script così completi e semplici da configuare?

    Io poi ho una versione su un sito, dove con Ajax carico le foto senza ricaricare la pagina, visualizzo le anteprime delle foto caricate senza ricaricare, e scelgo il numero di file da caricare, creando in diretta il numero di input che servono...
    Tutto molto carino! Bravo!

    RispondiElimina
  17. Difatti sono anni che cerco di unire tutte le funzioni necessarie in un unico componente per non rompermi i maroni ogni volta a scrivere mille righe di codice!
    Mi sono accorto che è necessario includere una nuova funzione che gestisca la qualità dei file JPG da carcare!
    PS: se ti va mi fai vedere il tuo modulo ajax?
    poi aggiorniamo la tua pagina con una guida chiara ;)

    RispondiElimina
  18. voglio assolutamente trovare una soluzione di upload che funzioni come uploadify! hai delle idee per capire come fare? se hai voglia in 2 possiamo farcela!

    RispondiElimina
  19. Ma tu cosa intendi per "fare una soluzione che funzioni come uploadify"? Qual'è il limite che vedi in questo script ed i vantaggi invece che vedi in quello?
    Certo mischiando html, ajax ed asp, puoi fare veramente di tutto. Dal mio punto di vista, già un upload multiplo, fatto senza ricaricare la pagina, nel quale puoi impostare i tipi di file accettati, e, per le immagini, eventuali resize al volo, sarebbe molto comodo.
    Con questa libreria si potrebbe veramente mettere su uno script molto carino e completo, che faccia tutto....e chi come noi traffica con ASP, non avrebbe da fare altro che mettere un include...

    RispondiElimina
  20. ciao alessio non riesco a fare un REQUEST.FORM per recuperare i valori degli input (vorrei recuperarli per attribuire un nome al file direttamente da input in modo da manipolare un solo file e rendere la funziona generalizzata)

    sai come si fa??
    grazie

    RispondiElimina
  21. Ciao!

    Per recuperare i dati dalla form di quel tipo, non devi recuperarli con "request.form" ma con "upload.form".

    Prova che poi eventualmente ti aiuto più nel dettaglio!

    RispondiElimina
  22. negativo fratello non va una bega :(

    RispondiElimina
  23. Ahaha...dai non fare così...bastano 2 righe:

    Set Upload = Server.CreateObject("Persits.Upload")

    valoreform=Upload.form("nomeform")

    e poi ovviamente la form chiamante deve essere con enctype multipart/form-data...
    prova a mettere il tuo codice(o una parte...)

    RispondiElimina
  24. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  25. come non detto ho risolto in modo differente!grazie comunque :)

    RispondiElimina
  26. salve a tutti,
    sono nuovo è sto cercando di adattare ado_upload e filelist_download.asp alle mie utilità ma ho lo stesso problema anche se ho settati il time out, in più sto adattando il file pannello.asp che gestisce i record del mio database. funziona solo in parte..io dovrei adattarlo al data base di pesrsit per la registrazione di file.
    Attendo fiducioso convinto di essere capitato nel forum giusto

    RispondiElimina
  27. Ciao Eric,
    ma che problema hai?...non ho capito bene...
    Che cosa devi fare?

    RispondiElimina
  28. ciao Alessio,
    inanzitutto grazie per la celerità..
    adesso ti elenco quello che ho fatto e che ho necessità di fare.
    premetto che, come avrai capito, sono un neofita di programmazione avanzata e cerco di applicare le utilities che trovo in rete.
    - Ho un dominio su aruba dove gestisco un sito
    - Ho cercato di applicare gli esempi di persit riadattando i file che mi servivano e cioe':
    ado_upload.asp ; filelist_download.asp ; ado.asp ; filelist.asp.
    Ci ho applicato anche la protezione per area riservata sempre tra gli esempi di aruba.
    Fin qui tutto bene..
    Riesco a far funzionare l'upload dei file e il conseguente salvataggio su DB; in più riesco a far mostrare la lista dei files presenti sul database.

    Avevo settato anche il limite di ampiezza dei file da poter uplodare. Ma mi dava errore per gli script troppo lunghi in termini di tempo.

    Sono andato ad aggiungere nel file ado_upload.asp lo script del timeout portandolo a 60000, ma come effettuo il salvataggio di file di grosse dimensioni (circa 50 MG) mi dice di aver effettuato il salvataggio ma mi ridà un errore dicendo che non ritrova il record del database dove dovrebbe aver salvato lo stesso.
    Questo è il primo problema.

    H Sto provando anche ad adattare il file pannello.asp presente nel vademecum aruba (http://vademecum.aruba.it/start/dsn_less/index4.asp)dove avrei bisogno di adattarlo al database che uso con persit (aspupload.mdb) e quindi di utilizzzare solo la funzione di eliminazione dei record e di visualizzazione della lista.

    Nel caso non sono riuscito ad essere chiaro (cosa molto probabile) ti posso inviare i file senza problemi, così, se puoi, gli potrsti dare un occhiata..
    Grazie ancora

    RispondiElimina
  29. ma è possibile usare gli script creati da Persits anche su Hosting linux di aruba?
    grazie

    RispondiElimina
  30. ..Io non so dirtelo perchè uso Hosting W...sicuramente ci sara' qualcuno + esperto di me..

    RispondiElimina
  31. Per usare l'Asp su Linux, ci vuole un motore che interpreti l'ASP... Mi sembra di aver visto un componente gratuito, ma non so se puoi installarlo sul server Aruba, a meno che non sia un server virtuale o un housing(ma hai detto hosting..quindi non credo.)

    RispondiElimina
  32. ciao alessio..non so se hai avuto tempo di leggere le mie domande..riesci a darmi qualche consiglio al riguardo?
    Grazie...

    RispondiElimina
  33. Ciao Eric,

    io in genere non uso il salvataggio che fa Aruba sul database, perché mi faccio io un semplicissimo salvataggio del nome del file in un campo di testo...e quando poi mi serve, estraggo il nome, nel percorso che ho stabilito(eventualmente, se hai percorsi dinamici, ti salvi anche quelli nel database).
    Il fatto di aver impostato la "server.scriptTimeout" a 60000 va benissimo(magari aggiungi uno zero se hai connessioni particolarmente lente.)
    Al massimo mandami i file al mio indirizzo mail, e specifica la pagina che ti da errore, così provo a caricarla su un mio hosting Aruba, e vedo.

    Ciao

    RispondiElimina
  34. Ciao alessio, inanzitutto grazie.
    In effetti credo che il tuo metodo sia il migliore ma non saprei come affrontarlo nel senso che non saprei programmare lo script di visulaizzazione dei file salvati sul server.
    Cmq per inviarti i file dove trovo la tua mail?
    Grazie

    RispondiElimina
  35. Ciao Eric...scusa...uno dei miei siti è www.milanositi.it

    RispondiElimina
  36. Ciao alessio, ti ho gisposto alla mail...tu mi hai consigliato di non salvare direttamente sul database ma su una cartella e riproporre poi semlicemente il percorso dei file per la visualizzazione;
    - ma come farei una volta utilizzati (nagari attraverso uno script) e ci potrei abbinare uno stile alla pagina della lista?
    Grazie ancora per l'attenzione...

    RispondiElimina
  37. Aspetta...mi sono perso qualcosa...

    Allora: io in genere mi salvo nel database il percorso del file o, se il percorso è fisso, mi salvo solo il nome del file.

    Dopo semplicemente, se fossero ad esempio immagini, le visualizzi ricreando il tag "img" mettendo nella proprietà "src" il percorso ed il nome del file....se fosse uno "zip", metterai il link che punta allo zip, per permettere all'utente di scaricare lo zip...se fosse un "pdf", il link per aprirlo online...ecc..

    RispondiElimina
  38. Di nuovo ciao Alessio, hai avuto modo di vedere i file che ti ho inviato?

    RispondiElimina
  39. Sono riusito a fare un upload di 35 mega ma quando vado nella lista il file è presente, provo a fare il download e mi da questo errore

    Errore 346 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH): Errore sconosciuto

    Penso che manchi davvero qualcosina ma non riesco a capire cosa...ciao

    RispondiElimina
  40. ciao alessio, mi è tornata l'esigenza (che non ero riuscito a risolvere) in merito al recupero delle input. mi avevi detto di provare questo:

    Set Upload = Server.CreateObject("Persits.Upload")

    valoreform=Upload.form("nomeform")

    ma nonostante tutto non mi si popola quel maledetto campo.

    Il problema che riscontro è semplice, ossia ho 4 input, seleziono un file da caricare nella posizione 2 (per esempio) ma lui lo identifica sempre come il primo (perchè non legge la Form di partenza).
    Hai idee da propormi? grazie ancora

    RispondiElimina
  41. Ciao,

    allora: la tua form di partenza che ha 4 input di tipo "file", ha 4 nomi univoci, tipo "file-1", "file-2", "file-3" e "file-4"...giusto?
    Nella pagina dove recuperi i valori, indicando quale input considerare, estrarrai tutti e 4 i valori...
    Quindi non vedo dove tu possa incontrare un problema.... tu fai un ciclo dinamico per controllare le input?

    RispondiElimina
  42. esatto, nella pagina di recupero faccio ottomilioni di cose, ma credo che sbaglio il punto dove inserire il codice.

    Non riesco a postare tutto il codice perchè mi dice che supero i caratteri disponibili, comunque in sintesi


    Set Upload = Server.CreateObject("Persits.Upload")
    Upload.RegKey = "41133-90544-38797"
    On Error Resume Next
    Upload.ProgressID = Request.QueryString("PID")
    Count = Upload.Save(DoveCaricare)

    poi

    For Each File in Upload.Files

    e qui dentro faccio tutti i controlli del caso

    teoricamente mi basterebbe inserire un Upload.Form("file1") per recuperarlo, ma su persist ho letto per per recuperare questi elementi dovrei utilizzare un

    For Each Item in Upload.Form

    ma non so dove metterlo
    (non so se mi sono spiegato bene)

    RispondiElimina
  43. Secondo me ti stai "impappinando" in una cosa che invece è semplice....allora:

    Mettiamo che tu abbia le 4 input chiamate:
    - file-1
    - file-2
    - file-3
    - file-4

    Nella pagina con lo script farai (dopo upload.save(percorso).....count= non serve, a meno che tu non voglia contare il numer di file che carichi....):

    set file=upload.files("file-1")
    if not file is nothing then
    filename=file.filename

    poi fai le tue operazioni....

    end if

    set file=upload.files("file-2")
    if not file is nothing then
    filename=file.filename

    poi fai le tue operazioni....

    end if

    eccc....
    Se invece hai un ciclo dinamico, potrebbe essere:

    for a=1 to 4
    set file=upload.files("file-"&a&"")
    if not file is nothing then
    filename=file.filename

    poi fai le tue operazioni....

    end if
    next

    Questo ultimo ciclo lo usi se non sai quante input ci sono (anche se devi saperlo almeno nella form della pagina prima, ed inviare il numero delle input di tipo "file"). Non serve che tu sappia se l'utente ha caricato o meno file, perché il controllo c'è già, che è quel "if not file is nothing"

    Prova

    RispondiElimina
  44. Evvai finalmente dopo mille seghe mentali sono riuscito a rilevare quella stramaledetta input!
    Tutto girava sul ciclo che facevo io, mentre la tua soluzione è stata quella definitiva!
    grazie ancora per il tuo prezioso aiuto!
    (ps: se mai ti dovesse interessare posso mandarti i miei file che "adesso" fatto tutto in una sola funzione)

    RispondiElimina
  45. Perfetto grande.

    La mia mail è info @ milanositi.it e tutte le implementazioni degli script basati su queste librerie sono sempre ben accette!

    Ora sto trafficando con jQuery....sto facendo un po' di numeri con jQuery+Ajax+Asp...e appena ho un attimo di tempo tiro fuori qualche bella cosetta che ho realizzato... cose molto interessanti vedrai!

    Ciao!

    RispondiElimina
  46. ok mail inoltrata fammi sapere cosa ne pensi!
    PS: non si sa mai che in futuro potremmo mixarci in qualche progetto

    RispondiElimina
  47. scusate se riapro l'argomento, ma se io nella form avessi anche un campo text e volessi recuerare quell'input?

    RispondiElimina
  48. Semplicemente, al posto di recuperare il dato con la solita request.form("nomedellainput") , lo recuperi con upload.form("nomedellainput")

    Ciao

    RispondiElimina
  49. Ciao.
    ho letto con interesse questa discussione.
    Sono alla disperata ricerca di uno script che mi permetta (su aruba) di caricare contemporanemante diverse immagini su un db per creare delle gallerie di immagini.
    Ho provato a dare un'occhiata a persit ma vedo che mi permette di caricare una sola immagine per volta !
    hai voglia di aiutarmi?
    grazie 1000 in anticipo!

    RispondiElimina
  50. Ciao semplicemente puoi mettere più input nella form iniziale. Lo script già ti carica i file che trova, e poi con un piccolo script recuperi i nomi delle input.

    Mettiamo ad esempio che ta abbia 5 input, chiamate "immagine-1", "immagine-2"...ecc...fino ad "immagine-5"

    recuperi i loro valori così:

    for a=1 to 5
    Set File = Upload.Files("immagine-"&a&"")
    filename=""

    If Not File Is Nothing Then
    filename=File.FileName
    end if

    next

    In questo modo hai i 5 nomi dei file, e li puoi mettere nel database. Ovviamente la query di upload/insert dei nomi, nel database, lo devi mettere prima del "next".

    RispondiElimina
  51. ciao Alessio.
    Grazie per la risposta pressochè immediata....
    Il problema è che non posso mettere 5 o più campi input....semplicemente perchè le gallerie sono composte anceh da 30/40 files e non è affatto comodo caricarli singolarmente.
    Io volevo fare in modo di fare un upload multiplo con una singola scelta...
    una cosa simile a facebook per intenderci...
    dove l'utente inserisce il campo "nome galleria" e poi cliccando su "scegli files" possa selezionare quanti files vuole.
    Sto impazzendo! ho cercato in ogni dove...ma non trovo nulla.

    RispondiElimina
  52. Ah, ma allora fai fare uno Zip, che poi estrai con uno script (ti serve uno script php), e poi vai a mettere i files dove vuoi. Se ti interessa, cerca su Google che trovi molti script php per gli zip.

    RispondiElimina
  53. ci avevo pensato anche io...
    ma vogliono proprio caricare le foto direttamente cavolo !
    ma dico... non esiste un cavolo di script che mi permetta di caricare + files contemporaneamente?

    RispondiElimina
  54. Eh...la input è singola...ne metti 10, ne carichi 10, ma ovviamente ne selezioni 10...
    Puoi anche fare un sistema dinamico col quale decidi ogni volta quante input presentare...quindi se devi caricare 10 foto, fai uscire 10 input e fai le 10 selezioni...se ne vuoi 50, fai lo stesso...
    Ma una sola input per selezionare n files, non si può fare...(che io sappia...ma non ho approfondito e non ho visto Facebook come faccia)

    RispondiElimina
  55. Ciao a tutti, perdonatemi se mi intrometto ma questo mi sembra il posto che più si avvicina a quello che cerco, visto anche che la discussione è attuale.
    Vi espongo quello di cui ho bisogno e che ho visto essere esigenza di molti:
    Devo permettere l'upload di immagini fotografiche in un forum su aruba. Naturalmente è necessario che non siano molto pesanti e che soprattutto rispettino una determinata larghezza, p.e. 800px. Con i file di persits di aruba sono riuscito ad ottenere l'upload dell'immagine originale e del suo resize, solo che mi crea una seconda img ridimensionata e rinominata che è quello che mi serve e vorrei eliminare l'originale. Il problema sorge nel caso venisse uplodato una img con un nome ugauale ad uno esistente che funziona perfettamente solo se viene conservato il file originale che io invece vorrei eliminare.
    A me servirebbe un'operazione al volo di upload calcolo delle dimensioni del file e ridimensionamento conservando nome originale e rinominando automaticamente in caso di nomi già esistenti.
    Magari potreste avere qualche suggerimento sulle modifiche del codice... ma questo magari lo vediamo successivamente se l'argomento può interessare.
    Un saluto a tutti.

    RispondiElimina
  56. Ciao,

    se l'esigenza è rinominare il file dopo aver controllato se esiste già un file con lo stesso nome, devi usare il FileSystemObject.
    Per quanto riguarda la procedura però devi fare attenzione ad una cosa, e cioè che lo script Persits già ti carica il file nel percorso che tu gli imposti, sovrascrivendo quelli presenti, quindi una soluzione può essere la seguente:
    - imposti come percorso una directory d'appoggio, nella quale carichi il file con Persits.
    - dopo lo sposti, e prima di spostarlo fai il controllo sul nome. In questa fase di spostamento, nel caso l'immagine non rispondesse alle misure/peso che hai deciso, fai anche l'operazione di resize.

    Per fare il controllo dell'esistenza del file con lo stesso nome, il codice è:

    Dim fsoMyFile
    Set fsoMyFile = CreateObject("Scripting.FileSystemObject")
    if fsoMyFile.FileExists(Server.MapPath("percorsodelfile"))=true then
    qui fai la rinomina del file e lo spostamento ed eventuale resize.
    else
    in questo caso invece non esiste, quindi non devi rinominare
    end if
    Set fsoMyFile = nothing

    ciao

    RispondiElimina
    Risposte
    1. Grazie Alessio, ma subito dopo aver inviato la richiesta d'aiuto mi si è accesa la lampadina ed ho risolto il tutto ottenendo esattamente quello che volevo, ora te lo spiego:
      Carico l'immagine e con Upload.OverwriteFiles = False evito di sovrascrivere file che hanno lo stesso nome aggiungendo automaticamente un num progressivo file(1).jpg file(2).jpg ecc. ecc.
      Salvo l'immagine e dopo un controllo delle dimensioni, se necessario, la ridimensiono e la rinomino aggiungendo un suffisso: small_file.jpg.
      A questo punto cancello il file originale file.jpg e poi rinomino il small_file.jpg in file.jpg
      Ho ottenuto così il file ridimensionato col nome originale.
      Il problema che mi si pone ora è come inserire il link dell'immagine all'interno del post per il forum... non so da dove partire!!! :(

      Elimina
  57. Beh quello ora dovrebbe essere il minore dei mali...
    Sicuramente hai un database in cui finiscono tutti i post, con le relative risposte...Quindi dovresti solo crearti una nuova tabella, nella quale abbini l'ID della risposta del post, alle immagini caricate, salvandoti il nome del file (e magari il percorso, se non riesci a risalire al percorso in automatico)...e a quel punto devi poi solo estrarre il nome del file e creare l'immagine....
    Non è niente di complicato.

    RispondiElimina
    Risposte
    1. Io vorrei fare una cosa più semplice: tutto a volo. Caricare l'immagine creare la stringa dell'img ed inserirla nel post... un javascript dovrebbe servire... ma io zero.

      Elimina