2009-09-23 6 views
1

Je suis en train de faire une Uploader d'image, l'utilisateur peut:
- parcourir le fichier local avec button.browse
- sélectionner un et l'enregistrer comme un FileReference.
- alors nous faisons FileReference.load() puis lier les données à notre contrôle d'image.
- après avoir fait une rotation dessus et changé les données de l'image.
- et pour finir, nous l'envoyons sur un serveur.FileReference et HttpService Parcourir l'image Modifier puis il Upload

Pour modifier les données de l'image que je reçois la matrice de l'image affichée et le transformer puis-je réutiliser la nouvelle matrice et le lier à mon ancienne image:

private function TurnImage():void 
{ 
    //Turn it 
    var m:Matrix = _img.transform.matrix; 
    rotateImage(m); 
    _img.transform.matrix = m; 
} 

Maintenant, la mater est que je ne sais vraiment pas comment envoyer les données sous forme de fichier à mon serveur parce qu'elles ne sont pas stockées dans FileReference et les données dans FileReference sont readOnly donc nous ne pouvons pas le changer ou en créer un nouveau, donc je ne peux pas utiliser .upload () ;.

Ensuite, j'ai essayé HttpService.send mais je ne peux pas comprendre comment vous envoyez un fichier et non un mxml.

Répondre

5

Vous pouvez utiliser URLLoader pour envoyer binaire ByteArray au serveur, comme:

var urlRequest : URLRequest = new URLRequest(); 
urlRequest.url = 'path to your server'; 
urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary(); 
urlRequest.method = URLRequestMethod.POST; 
urlRequest.data = UploadPostHelper.getPostData('image.jpg', byteArray); 
urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control', 'no-cache')); 

// create the image loader & send the image to the server:<br /> 
var urlLoader : URLLoader = new URLLoader(); 
urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
urlLoader.load(urlRequest); 

d'abord obtenir BitmapData pour l'image:

// set up a new bitmapdata object that matches the dimensions of the captureContainer; 
var bmd : BitmapData = new BitmapData(captureContainer.width, captureContainer.height, true, 0xFFFFFFFF); 

// draw the bitmapData from the captureContainer to the bitmapData object:<br /> 
bmd.draw(captureContainer, new Matrix(), null, null, null, true); 

Puis se byteArray:

var byteArray : ByteArray = new JPGEncoder(90).encode(bmd); 

et utilisez le code URLLoader ci-dessus pour envoyer l'image au serveur.

Cela fonctionnera correctement, sauf que vous n'obtiendrez pas la progression du téléchargement de fichier comme celle que vous obtenez de FileReference.upload. Si vous pouvez faire progresser le téléchargement en utilisant URLLoader, veuillez poster votre réponse ici.