Yii Framework Forum: Allegati Multipli Ad Un Post - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Allegati Multipli Ad Un Post come quello di questo forum Rate Topic: -----

#1 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 08 November 2012 - 10:34 AM

Ciao a tutti.
Nell'applicazione che sto realizzando ogni utente può scrivere dei post e dovrebbe poter allegare dei file(immagini, pdf, ecc). Un po' come la sezione attachments nella scrittura dei topic del forum; dopo l'upload(in ajax?) del singolo file, visualizzare 'add to post' oppure 'delete'.
Qualche idea da cui partire?

Grazie mille
0

#2 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 08 November 2012 - 11:40 AM

Sto provando eajaxupload, ma mi ritorna sempre 'Failed'. Qualcuno di voi l'ha provato?
0

#3 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 09 November 2012 - 09:22 AM

si io lo utilizzo senza problemi,

qui un pezzo di codice funzionante:
VIEW
<?php
$this->widget('ext.EAjaxUpload.EAjaxUpload',
                 array(
                       'id'=>'uploadFile',
                       'config'=>array(
                                       'action'=>'uploadcsv/'.$model->id.'',
                                       'allowedExtensions'=>array("csv"),
                                       'sizeLimit'=>1*1024*1024,// maximum file size in bytes
                       				   'txtButton'=>'Seleziona il file csv',
                                       'onComplete'=>"js:function(id, fileName, responseJSON){ $.fn.yiiGridView.update('csv-grid');  }",
                                       'messages'=>array(
        'typeError'=>"{file} Estensione non valida. Sono permessi solo i file con estensione: {extensions}.",
        'sizeError'=>"{file} Il File è troppo grande, il massimo consentito è: {sizeLimit}.",
        'minSizeError'=>"{file} Il File è troppo piccolo, il minimo consentito è: {minSizeLimit}.",
        'emptyError'=>"{file} Il File è vuoto, riprovare con un altro file.",
        'onLeave'=>"I file verranno caricati. Se si abbandona ora questa modalità, l'upload non sarà effettuato."
        ),
           'showMessage'=>"js:function(message){ alert(message); }"
)
));
?>


CONTROLLER:
Yii::import("ext.EAjaxUpload.qqFileUploader");
$folder=$_SERVER['DOCUMENT_ROOT'].Yii::app()->request->baseUrl.'/csv/'; // folder for upload csv
		$allowedExtensions = array("csv");
		$sizeLimit = 1*1024*1024;
		$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
		$result = $uploader->handleUpload($folder,true);

0

#4 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 09 November 2012 - 01:28 PM

Ciao grazie mille, provo e faccio sapere :)
0

#5 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 11 November 2012 - 07:51 AM

Ciao, sto provando il codice, però non mi è chiaro questo

View Postst4nny, on 09 November 2012 - 09:22 AM, said:

'action'=>'uploadcsv/'.$model->id.'',


non dovrei scrivere

 'action'=>'miocontroller/upload'

anche se così facendo, la console del browser mi ritorna un POST (Not Found); per non ricevere questo errore devo scrivere

'action'=>'index.php?r=miocontroller/upload',

A questo punto nessun errore in console, solo il solito 'Failed' :(
Ho come l'impressione che al controller non arrivi nulla, anche se commento tutto il codice del controller, mi ritorna sempre Failed.
0

#6 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 12 November 2012 - 04:42 AM

Io uso Plupload, e senza estensioni.

Vi consiglio in generale di includervi da voi le librerie js creandovi i vostri componenti, guardate questo wiki per avare una idea su come includerle.
0

#7 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 12 November 2012 - 10:26 AM

nel mio caso nell'action è specificato l'id perchè poi una volta caricato il file.. mi serve fare della roba.

cmq controlla che la cartella abbia permessi impostati a 777 (per escludere i problemi di permessi)
stampati tutte le variabili del controller.. e vedi se c'è qualcosa che non va.

controlla se effettivamente il file è stato messo nella cartella, il failed potrebbe venirti fuori anche per altre cose, magari perchè non gli ritorna un ok.
0

#8 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 13 November 2012 - 12:38 PM

View Postst4nny, on 12 November 2012 - 10:26 AM, said:

nel mio caso nell'action è specificato l'id perchè poi una volta caricato il file.. mi serve fare della roba.

cmq controlla che la cartella abbia permessi impostati a 777 (per escludere i problemi di permessi)
stampati tutte le variabili del controller.. e vedi se c'è qualcosa che non va.

controlla se effettivamente il file è stato messo nella cartella, il failed potrebbe venirti fuori anche per altre cose, magari perchè non gli ritorna un ok.


Ciao, ti ringrazio, sono riuscito a farlo funzionare :)
Posso chiederti una cosa? quando eseguo l'upload, avendo necessità di modificare il nome del file, ho modificato il fileName in qqFileUploader.php, dentro la funzione handleUpload. Il filename che invece viene restituito è il nome del file originale, non quello modificato. Qualche idea su come recuperare il nuovo nome?
0

#9 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 13 November 2012 - 01:25 PM

Tutto questo perchè, una volta fatto l'upload, ho bisogno di recuperare l'elenco dei path dei file uplodati, per inserire nel db e associarli al post che verrà scritto. :blink:
0

#10 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 16 November 2012 - 09:27 AM

Nessuna idea? :unsure:
0

#11 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 19 November 2012 - 04:25 AM

scusami sono stato un pò assente :)

cmq se ti fossi stampato le variabili l'avresti trovato, il nome del file.

if($result['success']==1){
 $file = $folder.$result['filename'];
 $model1->file_allegato = file_get_contents($file);
 $model1->save();
}

0

#12 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 19 November 2012 - 05:27 AM

View Postst4nny, on 19 November 2012 - 04:25 AM, said:

scusami sono stato un pò assente :)

cmq se ti fossi stampato le variabili l'avresti trovato, il nome del file.

if($result['success']==1){
 $file = $folder.$result['filename'];
 $model1->file_allegato = file_get_contents($file);
 $model1->save();
}


Ciao, ti rigrazio. Il mio problema è che non riuscivo a recuperare il nome del file caricato lato client.
Poi ho risolto capendo che lo potevo recuperare dentro al responseJSON con

'onComplete'=>"js:function(id, fileName, responseJSON){ 
    alert(responseJSON['filename']);
}",

:)
0

#13 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 19 November 2012 - 07:28 AM

View Postst4nny, on 19 November 2012 - 04:25 AM, said:

scusami sono stato un pò assente :)

cmq se ti fossi stampato le variabili l'avresti trovato, il nome del file.

if($result['success']==1){
 $file = $folder.$result['filename'];
 $model1->file_allegato = file_get_contents($file);
 $model1->save();
}


Per caso tu riesci a fare l'upload di pdf e png? per queste due tipologie a me non funziona..
0

#14 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 388
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 19 November 2012 - 08:01 AM

Io stò valutanto tra le due (Plupload & EAjaxUpload) qualcuno ha dei pro e contro da scrivere in merito... così, da mettere in guardia chi si avventura ad esplorarli ? :lol:

tnx
0

#15 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 20 November 2012 - 06:36 AM

no nessun problema con le estensioni
Nel Controller:
$allowedExtensions = array("png","jpg","doc","pdf","rtf","gif","zip","rar");
$sizeLimit = 10*1024*1024;
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);	

Nel Widget nella View:
'action'=>'azione',
'allowedExtensions'=>array("png","jpg","doc","pdf","rtf","gif","zip","rar"),
'sizeLimit'=>10*1024*1024,// maximum file size in bytes


controlla di aver scritto per bene gli array.

@paskuale io ho usato EAjaxUpload perchè c'era un'estensione pronta e non mi ha dati grossi problemi. però devo dire che in altri casi mi è capitato di utilizzare plupload ed è veramente fatto bene.
0

#16 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 388
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 20 November 2012 - 07:09 AM

Quote

@paskuale io ho usato EAjaxUpload perchè c'era un'estensione pronta e non mi ha dati grossi problemi. però devo dire che in altri casi mi è capitato di utilizzare plupload ed è veramente fatto bene.


Si effettivamente ho abbracciato EAjaxUpload alla fine, solo che mi sfugge una cosa, volendo usare un form multistep (e anche multiModel ^^) come faccio a leggere nel post, i campi relativi ai file caricati ?
Ho un _form (view) che gestisce 2 models, modelA... e modelB, vorrei associare i campi del modelB all'estensione EAjaxUpload.
Perchè in realtà io i file li metto in una cartella /temp e poi al salvataggio di tutto il form, sposterei questi files nel posto + idoneo.

tnx
0

#17 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 388
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 20 November 2012 - 07:40 AM

View PostGiacomo, on 11 November 2012 - 07:51 AM, said:

'action'=>'index.php?r=miocontroller/upload',

A questo punto nessun errore in console, solo il solito 'Failed' :(
Ho come l'impressione che al controller non arrivi nulla, anche se commento tutto il codice del controller, mi ritorna sempre Failed.


@giacomo io ho risolto scrivendo:
'action'=>Yii::app()->createUrl('//nomeController/action'),


magari ti torna utile, e avresti del codice + leggibile :)
0

#18 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 20 November 2012 - 08:23 AM

View Postpaskuale, on 20 November 2012 - 07:09 AM, said:

Si effettivamente ho abbracciato EAjaxUpload alla fine, solo che mi sfugge una cosa, volendo usare un form multistep (e anche multiModel ^^) come faccio a leggere nel post, i campi relativi ai file caricati ?
Ho un _form (view) che gestisce 2 models, modelA... e modelB, vorrei associare i campi del modelB all'estensione EAjaxUpload.
Perchè in realtà io i file li metto in una cartella /temp e poi al salvataggio di tutto il form, sposterei questi files nel posto + idoneo.

tnx


a questo punto penso dovresti usare ajax per popolarti i campi del modelB. 'onComplete'=>"js:function(id, fileName, responseJSON){ $('#idcampo').val(fileName); }",
ad esempio.

oppure se hai un codice del tipo: <div id="div">renderePartial per la form del ModelB</div>
potresti mandare un renderPartial con la form compilata con json, dopo l'upload.
e quindi: onComplete'=>"js:function(id, fileName, responseJSON){ $('#div').html(responseJSON.data);"

una cosa del genere.
0

#19 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 388
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 20 November 2012 - 08:28 AM

View Postst4nny, on 20 November 2012 - 08:23 AM, said:

a questo punto penso dovresti usare ajax per popolarti i campi del modelB. 'onComplete'=>"js:function(id, fileName, responseJSON){ $('#idcampo').val(fileName); }",
ad esempio.


Ho inserito nella view:
echo $form->hiddenField($modelFile, 'uf_title');

Però non avendo limiti al numero di files da caricare? Uso un separatore e concateno tutto nella input nascosta ? O creo dinamicamente una input di tipo "nome[$n]" per ogni file caricato ?

tnx
0

#20 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 20 November 2012 - 09:10 AM

View Postpaskuale, on 20 November 2012 - 08:28 AM, said:

Ho inserito nella view:
echo $form->hiddenField($modelFile, 'uf_title');

Però non avendo limiti al numero di files da caricare? Uso un separatore e concateno tutto nella input nascosta ? O creo dinamicamente una input di tipo "nome[$n]" per ogni file caricato ?

tnx


si puoi fare una cosa del genere.
$('#uf_title').val($('#uf_title').val() + ','+fileName);


oppure ogni volta crea un input text con nome uf_title[] e poi te li salvi nel submit.
forse meglio la seconda.. magari facendoli vedere anche con un readonly.
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users