Düz benim sunucuya bir BitmapData nesnesi yüklemek nasıl?

7 Cevap php

Ben imageshacks XML API benim Flaş Uygulama (AS3) yüklemek istediğiniz. Ben bunu nasıl bilmek istiyoruz.

"Flash'ta, ancak biz Flaş API bir sınırlama çalıştırmak, URLRequest ve URLLoader sınıflarını kullanarak veri POST gerekir. URLRequest data özelliği bir UrlVariablesByteArray nesne olabilir ya. Ad değer çiftleri göndermek için kolay bir yolu yoktur Çoğu yükleme uygulamaları ham dosya verilerini eşlik edecek bir dosya adı ve diğer başlıklarını gerektirir çünkü JPG bayt dizisi ile birlikte. Bu "büyük bir sorundur

Birisi bana yukarıdaki üstesinden yardımcı olabilir diye umuyordum!

Tüm teşekkürler

Update

Ben burada bu yazının yararlanarak denedim: http://www.mikestead.co.uk/2009/01/04/upload-multiple-files-with-a-single-request-in-flash/

Sorun kaydedilmemiş görüntüler için değil, ama yerel makineden görüntüleri almak ve daha sonra görüntüler zaten bir isim olmuştur sunucusuna yükler!

7 Cevap

Bu benim için büyük yardımı oldu: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/

Gereken yerde alan adları ve dosya adları eklemek için URLRequestWrapper değiştirmeniz gerekir. Burada yaptığım buydu:

bytes = 'Content-Disposition: form-data; name="' + $fieldName + '"; filename="';

Sunucu bir dosya yükleme olarak anlamak böylece o başlıkların en biçimlendirme yapar.

Arada, bir BitmapData varsa ilk JPEG veya PNG kodlamak gerekebilir.

Regards, Artem

Eğer dosya verilerinizi ve URLRequest birlikte istediğiniz herhangi bir başka veri gönderebilirsiniz:

var params:URLVariables = new URLVariables();
params.id = ride.id;
params.filename = ride.map_image;
params.path = 'maps/';
var req:URLRequest = new URLRequest( ModelLocator.SERVER_URL + "/php/uploadpic.php");
req.method = URLRequestMethod.GET;
req.data = params;
fileRef.upload(req);

on the server side in php you access the extra variables as: $_REQUEST['path'] and $_REQUEST['filename'] etc

Ben imageshack API kullanmadıysanız, ama ben önce bir sunucuya BitmapData yolladım.

Bir URLRequest oluşturmak ve bir ByteArray olarak BitmapData eklemeniz gerekir, bu nedenle kod, sanırım, gibi bir şey olacaktır:

var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");//this says the data your sending is binary, not text
var uploadRequest:URLRequest = new URLRequest('yourImageShackUploadURL.php');
uploadRequest.requestHeaders.push (header);
uploadRequest.method = URLRequestMethod.POST;
uploadRequest.data = yourBitmapData.getPixels(yourBitmapData.rect);

sendToURL( uploadRequest);

Aşağıdaki ithalatı gerekebilir:

import flash.net.* // for sendToURL and other net stuff
import flash.geom.Rectangle;
import flash.display.BitmapData;

You get a ByteArray from your bitmapData using the BitmapData's getPixels() method. It needs a Rectangle instance for to know the position and dimensions you need, but if you want the ByteArray for all the BitmapData, not just a part of your, you can use the BitmapData's rect property. You create a header using the URLRequestHeader class and you push it into the requestHeaders of your URLRequest. You specify your method is post using the method property.

Bu olmalıdır. Ben başka bir API belirli şeyler farkında değilim, bu yüzden bu yardımcı olur umarım.

İyi şanslar!

Hi i don't really get the problem of the question, anyway: If the question is how to send the name of the file and the extension (image type) from flash toghether with the byteArray of image data you should use a URLVariables object.

Bu nesne de metin yerine byte olarak sorgu dizesi gönderebilir.

var request:URLRequest = new URLRequest();
request.url = "your_server_page_for_example.php";
request.method = URLRequestMethod.POST;

var variables:URLVariables = new URLVariables();
variables.name = "imgName";
variables.type = ".jpg";
variables.image = myByteArray;

request.data = variables;

Ben imageshack API kullanmadıysanız, ama Adobe'nin JPGEncoder sınıfını kullanarak denemek isteyebilirsiniz - Burada bir kullanıcı adı ve JPG adlı bayt dizisi, gerçekten oldukça basit geçer hızlı bir örnek.

private function savePicToServer(bmpData:BitmapData):void
{
    var jpgEncoder:JPGEncoder = new JPGEncoder(85);
    var jpgStream:ByteArray = jpgEncoder.encode(bmpData);

    var loader:URLLoader = new URLLoader();
        configureListeners(loader);

    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
    var request:URLRequest = new URLRequest(ModelLocator.BASE_URL + ModelLocator.UPLOAD_URL + "?user=" + ModelLocator.getInstance().username);
    request.requestHeaders.push(header);
    request.method = URLRequestMethod.POST;
    request.data = jpgStream;
    loader.load(request);
}

Değişkenler sorgu dizesi bir parçası olarak geçirilen unutmayın. Birçok kişinin öne sürdüğü gibi URLVariables biz zaten ByteArray geçmek için kullandığınız isteğin data özelliğinde saklanır gibi, URLVariables kullanamazsınız.

Bu ikili veri değil bu yüzden sen URLVariables, sadece base64 kodlamak ByteArray kullanabilirsiniz:

import mx.utils.Base64Encoder;
// ...
var urlRequest:URLRequest = new URLRequest("/whatever");
urlRequest.method = URLRequestMethod.POST;
var urlVariables:URLVariables = new URLVariables();
var base64Encoder:Base64Encoder = new Base64Encoder();
base64Encoder.encodeBytes(byteArray);
urlVariables.something_base64 = base64Encoder.toString();
urlRequest.data = urlVariables;
navigateToURL(urlRequest, "_blank");

sonra sunucu tarafı base64decode'' sonrası alanda, yani:

php:

base64_decode($_POST['something_base64'])

raylar:

require 'base64';
# ...
Base64.decode64(params[:something_base64])

Sadece buradayız herkese benim 2 sent upload.php bir php uygulamasını bulmak için. Eğer HTTP_RAW_POST_DATA denedim ve çalıştı değilse, file_get_contents ("php :/ / input") deneyin;

benim için çalıştı

$data = file_get_contents("php://input");
file_put_contents("filename",$data);