[AS3] Ανέβασμα αρχείου σε server

ActionScript και Flex Προγραμματισμός

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από HeRu » 18 Ιούλ 2009 17:27

Ανεβασμα αρχειου σε server

ActionScript

Για να δουλέψεις με τοπικά αρχεία στο Flash, πρέπει αναγκαστικά να στοχεύεις τον Flash Player 10(Flash CS4), γιατί εκεί υπάρχει το FileReference που σου επιτρέπει να έχεις πρόσβαση στα τοπικά αρχεία.

Κώδικας: Επιλογή όλων

import flash.events.*;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.FileFilter;

// Φτιάχνουμε ένα FileReference instance
var file:FileReference = new FileReference();

// Το selectHandler καλείται όταν έχει επιλεγεί ένα αρχείο.
file.addEventListener(Event.SELECT, selectHandler);

// Η browse μέθοδος ανοίγει το κλασσικό select file dialog. Του περνάμε ένα array με FileFilter instances που περιεχέι τα file types που θα μπορεί να διαλέξει ο χρήστης. Εδώ θα δείχνει μόνο εικόνες. Αν το αφήσεις άδειο( file.browse() ), θα είναι όλα τα αρχεία.

file.browse(new Array(new FileFilter("Images", "*.jpg;*.jpeg;*.gif;*.png")));

private function selectHandler(e:Event):void 
{
// Φτιάχνουμε ένα request instance και του ορίζουμε την μέθοδο και το url.
var req:URLRequest = new URLRequest();
req.method = URLRequestMethod.POST;
req.url = "upload.php";

// Listener για όταν ολοκληρωθεί το upload.
file.addEventListener(Event.COMPLETE, uploadCompleteHandler);

// Ξεκινάμε το upload
file.upload(req, "Filedata");
}

function uploadCompleteHandler(event:Event):void
{
   // Καθαρίζουμε τον Listener
   file.removeEventListener(Event.COMPLETE, uploadCompleteHandler); 

   // Εδώ μπορείς επίσης να επιστρέψεις response από τον server
   // και να δείξεις ένα confirmation graphic
}

PHP
Μια μόνο γραμμή αρκεί για testing purposes!

Κώδικας: Επιλογή όλων

move_uploaded_file($_FILES['Filedata']['tmp_name'], $_FILES['Filedata']['name']);
Αλλά κανονικά θα πρέπει να βάλεις κάποιους ελέγχους για το μέγεθος, το όνομα κλπ.

Άβαταρ μέλους
avax31
Δημοσιεύσεις: 95
Εγγραφή: 11 Ιουν 2009 14:16

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από avax31 » 20 Ιούλ 2009 16:32

Μια χαζη ερωτηση.
τον κωδικα που εδωσες πιο πανω gia to flash, τον βαζω λογικα σε ενα button ετσι?
τι γινεται ομως οταν μεσα στο button δεν με αφηνει να γραψω κωδικα?

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από HeRu » 20 Ιούλ 2009 16:41

Τον κώδικα στην Actionscript 3.0 τον βάζεις μόνο σε timeline ή εξωτερικά αρχεία!

Θα πρέπει να το βάλεις σε ένα frame και αν θέλεις να λειτουργεί με το πάτημα ενός κουμπιού, θα πρέπει να βάλεις το file.browse μέσα σε μια function και να γίνεται call με ένα click event listener.

Άβαταρ μέλους
avax31
Δημοσιεύσεις: 95
Εγγραφή: 11 Ιουν 2009 14:16

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από avax31 » 20 Ιούλ 2009 18:15

Εννοεις πως την γραμμη του file.browse στον κωδικα που δινεις θα πρεπει να την μετατρεψω σε μια εντολη event listener?

Άβαταρ μέλους
avax31
Δημοσιεύσεις: 95
Εγγραφή: 11 Ιουν 2009 14:16

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από avax31 » 23 Ιούλ 2009 04:47

Τελικα ηταν προφανες...
Σε ευχαριστώ και πάλι.

:]

Άβαταρ μέλους
avax31
Δημοσιεύσεις: 95
Εγγραφή: 11 Ιουν 2009 14:16

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από avax31 » 21 Αύγ 2009 20:36

Επιστρέφω στο θέμα για μια άλλη ακόμα ερώτηση.
Το αρχείο που κάνω upload στον server, θέλω να το εμφανίσω μέσα σε ενα movieClip με τον παρακάτω κώδικα:

Κώδικας: Επιλογή όλων

import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
var container:Sprite = new Sprite();
addChild(container);
var pictLdr:Loader = new Loader();
var pictURL:String = "banana.jpg"
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
function imgLoaded(event:Event):void
{
container.addChild(pictLdr.content);
}
Τον 'εχω παραλλάξει ως εξής:

Κώδικας: Επιλογή όλων

import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
var container:Sprite = new Sprite();
addChild(container);
var dispBox:Loader = new Loader();
var pictURL:String = file.toString();
var pictURLReq:URLRequest = new URLRequest(pictURL);
dispBox.load(pictURL);
dispBox.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
function imgLoaded(event:Event):void
{
container.addChild(dispBox.content);
}
Το αρχικό δουλεύει μια χαρά. Σε αυτό που έχω αλλάξει όμως μου βγάζει το εξής στο output

Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found.

Που κάνω λάθος? Μάλλον το μπέρδεμα γίνεται

Κώδικας: Επιλογή όλων

var pictURL:String = file.toString();
var pictURLReq:URLRequest = new URLRequest(pictURL);
Ευχαριστώ εκ των προτέρων

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από HeRu » 25 Αύγ 2009 09:09

Θα πρέπει στο picURL να βάλεις το full path του αρχείου στον server. π.χ.

Κώδικας: Επιλογή όλων

var pictURL:String = "www.mysite.gr/photo1.jpg";
Το file variable που χρησιμοποιείς για να κάνεις το upload έχει reference μόνο στο τοπικό αρχείο.

Αν θέλεις να το κάνεις πιο δυναμικό, αν προσέξεις μέσα στο uploadCompleteHandler γράφω "Εδώ μπορείς επίσης να επιστρέψεις response από τον server". Εκεί είναι ένα κάλο σημείο για να επιστρέψεις το όνομα του uploade file από την php και να φορτώσεις το uploaded αρχειο πίσω στο flash.

Άβαταρ μέλους
avax31
Δημοσιεύσεις: 95
Εγγραφή: 11 Ιουν 2009 14:16

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από avax31 » 25 Αύγ 2009 10:06

Σκέφτηκα πως θα μπορούσα να το χρησιμοποιήσω κατα την διάρκεια που αναφέρεται σε τοπικό αρχείο, αλλα έτσι όπως το θέτεις νομίζω είναι πιο λογικό. Υπάρχει περίπτωση για κάποιο tip?
thnx a lot

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από HeRu » 25 Αύγ 2009 11:29

Επιστρέφεις το όνομα που έδωσες στο αρχείο στον server, το προσθετής στο path στο οποίο αποθηκεύονται τα αρχεία στον server και κάνεις το load request.

ActionScript

Κώδικας: Επιλογή όλων

function uploadCompleteHandler(event:Event):void
{
   // Καθαρίζουμε τον Listener
   file.removeEventListener(Event.COMPLETE, uploadCompleteHandler);

   var fileName = new URLVariables(event.data).filename;
   ...
   var pictURL:String = "http://www.mysite.gr/images/" + fileName;
   var pictURLReq:URLRequest = new URLRequest(pictURL);
   ...
}
PHP

Κώδικας: Επιλογή όλων

...
echo "filename=$filename";

Άβαταρ μέλους
avax31
Δημοσιεύσεις: 95
Εγγραφή: 11 Ιουν 2009 14:16

[AS3] Ανέβασμα αρχείου σε server

Δημοσίευση από avax31 » 07 Σεπ 2009 22:57

Γεια και πάλι.
Δεν είχα είχα χρόνο να το κοιτάξω. Τώρα που το κοίταξα και έκανα ένα τεστ μου βγάζει ένα λάθος στο output.
Υπάρχει κάποιος χώρος που να περιγράφει τα λάθη που εμφανίζονται στον compiler ή στο output?

Ευχαριστώ για τον χρόνο σας

Απάντηση

Επιστροφή στο “ActionScript και Flex Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης