leggendo gli articoli di And80 sto cercando di rifare l'upload in As3, ma ora mi trovo bloccato allo stesso punto in cui ero con las2, e cioè non riesco a passare la variabile della destinazione a php
ho usato i codici di And80 sull'upload di file, sul send e load vars e sulle azioni x i pulsanti
Codice PHP:
browsebutton.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(e:MouseEvent) {
out();
}
function out() {
// inizializzo una variabile che contiene il nome del file a cui inviare i dati
var url:String = "test_uploadAS3.php";
// inzializzo un oggetto URLVariables preposto a contenere le variabili da inviare e lo riempio con due variabili
var variables:URLVariables = new URLVariables();
variables.folder = "./public/works/";
//variables.prova2 = "seconda variabile";
// a questo punto creo un nuovo oggetto URLRequest che "riempirò" con le variabili da inviare allo script esterno
// e accedendo alla sua proprietà "data" gli assegno l'oggetto URLVariables creato e riempito in precedenza
var request:URLRequest = new URLRequest(url);
request.data = variables;
// l'ultimo passo è il richiamo della funzione contenuta nel package "flash.net", che invia le variabili all'url richiesto
// senza aspettarsi una risposta in cambio
sendToURL(request);
// inizializzazione dell'istanza di FileReference
var file:FileReference = new FileReference();
/* configurazione degli eventi associati all'upload del file
inseriti nell'ordine in cui vengono richiamati se non ci sono intoppi */
file.addEventListener(Event.SELECT, select); // selezione del file nella finestra di upload
file.addEventListener(Event.OPEN, open); // inizio di upload del file
file.addEventListener(ProgressEvent.PROGRESS, progress); // descrizione del progresso richiamata periodicamente durante l'upload
file.addEventListener(Event.COMPLETE, complete); // completamento della trasmissione del file al server, completato
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteData); // verifica delle informazioni ricevute dal server sull'avvenuto upload nel server
// configurazione degli eventi associati ad eventuali errori o scelte dell'utente che bloccano l'upload del file
file.addEventListener(Event.CANCEL, error); // richiamato nel caso che venga cliccato "Annulla" nella finestra di scelta del file
file.addEventListener(HTTPStatusEvent.HTTP_STATUS, error); // richiamato nel caso di errore generato dal fallimento nell'upload
file.addEventListener(IOErrorEvent.IO_ERROR, error); // richiamato se l'upload fallisce per errore di comunicazione con il file di upload lato server
file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, error); // richiamato in caso di violazione delle regole di sicurezza del flash player
// Funzione richiamata dagli eventi che provocano errore
function error (event:*):void {
trace("Errore di tipo: " + event.type);
}
// Funzione richiamata quando il file viene selezionato
function select(event:Event):void {
trace("select function: name=" + file.name + " URL=" + request.url);
file.upload(request);
}
// Funzione richiamata ad inizio upload (o download)
function open(event:Event):void {
trace("open function: " + event);
}
// Funzione richiamata dopo onOpen ad upload / download cominciato
function progress(event:ProgressEvent):void {
trace("progress function name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
}
/* Funzione richiamata ad upload / download terminato.
Il file sul server avra' gia' elaborato quando questo metodo verra' richiamato. */
function complete(event:Event):void {
trace("complete function : " + event);
filenometxt.text=file.name;
trac.text="ok";
}
/* Funzione richiamata ad upload elaborato e terminato sul server
* L'evento contiene al suo interno una proprietà "data" che contiene la risposta del server
* e che è utile elaborare nel caso si voglia avere una conferma dell'upload avvenuto
* utile ad esempio nel caso che si voglia verificare che un determinato file non esista già
* sul server e nel caso mostrare un warning all'utente */
function uploadCompleteData (event:DataEvent) {
trace("upload return data function : " + event);
trace("data received : " + event.data);
filenometxt.text=file.name;
}
/* Array per specificare il tipo di dati da visualizzare per l' upload
* L' array sarà composto da tante istanze di FileFilter quanti sono i tipi differenti di files da voler far uploadare.
* Ogni FileFilter sarà composto da due parametri di tipo stringa che rappresenteranno rispettivamente
* la descrizione del tipo di file) e le estensioni valide per quel tipo di file separate da ";" */
var filetype:Array = [
// Esempio alcuni tipi di immagini
new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png"),
// Esempio files di testo
new FileFilter("Text Files (*.txt, *.rtf)", "*.txt; *.rtf"),
// Esempio specifico di un unico file
new FileFilter("Specific File (test.swf)", "test.swf"),
// Esempio tutti i files
new FileFilter("All Files (*.*)", "*.*")]
// comando da usare quando vogliamo sfruttare l' upload
file.browse(filetype);}
lìupload funziona se nel php scrivo io la destinzaione, ma come si vede dall'as io ho definito la variabile folder che rappresenta la destinazione che deve considerare il file test_uploadAS3.php che ha qst codice:
Codice PHP:
<?php // 4, compatibile 5.0 e 5.1
// Directory di destinazione
//$destination_dir = "./public/works/";
$destination_dir = $_POST["folder"];
// Verifico che il file sia valido e come lui tutte le informazioni
// Controllo inoltre che non ci siano errori nell' invio ... altrimenti non faccio niente
if(
// esiste il file di nome Filedata ?
isset($_FILES['Filedata']) &&
// é un array ?
is_array($_FILES['Filedata']) &&
// esistono gli elementi tmp_name, name, size, error
// di questo array ?
isset(
$_FILES['Filedata']['tmp_name'],
$_FILES['Filedata']['name'],
$_FILES['Filedata']['size'],
$_FILES['Filedata']['error']
) &&
// l' errore é esattamente zero ?
intVal($_FILES['Filedata']['error']) === 0
) {
// operazione di spostamento da temporanea ad altra cartella
// se riesco a spostare il file sulla destinazione scrivo un tipo di output
if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $destination_dir.$_FILES['Filedata']['name'])) {
$result = "&result=".$_FILES['Filedata']['name']."&";
//echo "result=successfull uploaded&date=".date('Y-m-d H:i:s')."&filename=$n&size={$_FILES['Filedata']['size']}";
}
// altrimenti scrivo un altro tipo di output
else {
$result = "&result=Unable to move file&";
//echo "result=unable to move file&date=".date('Y-m-d H:i:s')."&filename={$_FILES['Filedata']['name']}&size={$_FILES['Filedata']['size']}&error={$_FILES['Filedata']['error']}";
}
if(@$fp = fopen($destination_dir.'upload.txt', 'w')) {
fwrite($fp, $result);
fclose($fp);
}
}
?>
cosa sbaglio?
grazie x la pazienza scusate x l'insistenza ma sono disperato, cerco di fare del mio meglio ma i miei limiti