2015-09-18 14 views
6

AS3'te yerleşik bir video oynatıcım var. Bu kodu kullanarak video oynatıcının fotoğrafını çeker:Flaştan laravel rotasına bitmap verileri yükle

var uploadUrl = 'http://localhost:8000/assets/uploadframegrab'; 
var bitmap = new Bitmap();   
var graphicsData : Vector.<IGraphicsData>; 
graphicsData = container.graphics.readGraphicsData(); 
bitmap.bitmapData = GraphicsBitmapFill(graphicsData[0]).bitmapData; 

var jpgEncoder:JPGEncoder = new JPGEncoder(85); 
var jpgStream:ByteArray = jpgEncoder.encode(bitmap.bitmapData); 

var loader:URLLoader = new URLLoader(); 
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 
var csrf:URLRequestHeader = new URLRequestHeader("X-CSRF-Token", csrfToken);   
var request:URLRequest = new URLRequest(uploadUrl); 
request.requestHeaders.push(header); 
request.requestHeaders.push(csrf); 
request.method = URLRequestMethod.POST; 
request.data = jpgStream; 
loader.load(request); 

benim laravel rotalardan birini kullanarak JPG kodlanmış yüklemeniz gerekir. Ben AS3 kod çalıştırdığınızda

Route::post('assets/uploadframegrab', '[email protected]');

, bu laravel rota çağırır, ama benim $request değişken boş görünüyor: gibi Benim rota görünüyor. Tüm üstbilgileri ve öğelerini gösteren ağ bilgisi sekmesindeki Request Payload özelliği, görüntü dosyasının kaynağına benzeyen özellikleri içerir.

Ben return Response::json(['filedata' => $request]); tüm yaparsanız alıyorum şudur:

filedata: { 
    attributes: {}, 
    request: {}, 
    query: {}, 
    server: {}, 
    files: {}, 
    cookies: {}, 
    headers: {} 
} 

Benim uploadFramegrab fonksiyonudur sadece bu şimdilik:

public function uploadFramegrab(Request $request) 
{ 
    if ($request) 
    { 
    return Response::json(['filedata' => $request]); 
    } 
    else 
    { 
    return Response::json(['error' => 'no file uploaded']); 
    } 
} 

online aradık ama özel olarak bir şey bulamıyorum flaştan laravel'e yükleme. Hiçbir sorun çözmek için javascript yaptım. Bunun ne olabileceğini bilen var mı? Daha fazla bilgi için lütfen sorunuz. AS3 (vurgu madeni) için doc dayanarak

+0

[Rotanızı CSRF korumasından hariç tutabilirsiniz] (http://laravel.com/docs/master/routing#csrf-excluding-uris). – akmozo

+0

Evet, bu bir 'X-CSRF-TOKEN' başlığı kullanarak daha iyi. – akmozo

+0

@akmozo Sorumu şu anda bu konuyla nerede olduğumu gösterecek şekilde güncelledim – Ronnie

cevap

2

Bunu yapmak için, Jonas Monnier numaralı telefondan Multipart.as (AS3 çok parçalı form veri isteği üreteci) kullanabilirsiniz. O (github projenin sayfasından temel örneği kullanarak) Bu örnekte bir göz atın, kullanmak gerçekten çok kolay: Yaptığın genellikle gibi PHP tarafında, Sonra

var upload_url:String = 'http://www.example.com/upload'; 

// create an orange square 
var bmp_data:BitmapData = new BitmapData(400, 400, false, 0xff9900); 

// compress our BitmapData as a jpg image 
var image:ByteArray = new JPGEncoder(75).encode(bmp_data); 

// create our Multipart form 
var form:Multipart = new Multipart(upload_url); 

    // add some fields if you need to send some informations 
    form.addField('name', 'bmp.jpg'); 
    form.addField('size', image.length.toString()); 

    // add our image 
    form.addFile('image', image, 'image/jpeg', 'bmp.jpg'); 

var loader:URLLoader = new URLLoader(); 
    loader.load(form.request); 

yapmanız:

Yardımcı olabilir.

+0

Bu kadar! Harika çalıştı. Multipart.as dosyasını X-CSRF-Token üstbilgisini eklememe izin vermek için değiştirdim, ancak bunun dışında, aradığım şey bu. Bana izin verdiğinde ödül vereceğim. – Ronnie

+0

@Ronnie CSRF Token için, şunu deneyebilirim: 'form.addField ('_ token', your_csrf_token);' sınıfı düzenlemeden. – akmozo

+0

Gerçekten doğru birisin! Çok teşekkür ederim. – Ronnie

0

:

veriler kullanıldığı yöntemi kullanılan nesne türüne bağlıdır: bir amacı, bir ByteArray ise

  • Nesne, ByteArray nesnesinin ikili verileri POST verileri olarak kullanılır. GET için, ByteArray türünün verileri desteklenmez. Ayrıca, ByteArray türü verileri FileReference.upload() ve FileReference.download() için desteklenmez.
  • Nesne bir URLVariables nesnesiyse ve yöntem POST ise, değişkenler x-www-form-urlencoded formatı kullanılarak kodlanır ve sonuç dizesi POST verileri olarak kullanılır. Bir istisna, değişkenlerin çok parçalı/form-veri postasında ayrı alanlar olarak gönderildiği FileReference.upload() öğesine yapılan bir çağrıdır.

Burada birinci durumda açıkça konum. Laravel Requests doc itibaren

:

bağımlılık enjeksiyon yoluyla cari HTTP isteğinin bir örneğini elde etmek için, siz yazarken-ipucu olmalıdır Illuminate \ Http \ Talep sınıfı Denetleyiciniz yapıcı veya yöntem üzerinde. Geçerli istek örneği otomatik olarak servis kabı tarafından enjekte edilir. Request class API

:

dize | kaynak getContent (yanlış bool $ asResource =)

istek gövdesi içeriği döndürür.

Bir araya getirmek:

public function uploadFramegrab(Request $request) { 
    $content = $request->getContent(); 
    $fileSize = strlen($content); 
} 

laravel 4'te: Ben laravel kontrol

$csrf = Request::header('X-CSRF-Token'); 
// Add a header like this if you want to control filename from AS3 
$fileName = Request::header('X-File-Name'); 
$content = Request::getContent(); // This the raw JPG byte array 
$fileSize = strlen($content); 

Son kez istek gövdesini okumak için php://input kullanır. Daha fazla bilgi için bu answer'a bakın.

+0

Aslında bunu anladım. 'Php: // input' kullanarak, bayt dizisine erişmeme izin verir. Bu noktada, 'fopen()', 'fwrite()' kullanarak yeni bir dosya oluyorum. Yemin ederim, daha önce php: // input'u kullanmayı denedim ve işe yaramadı. 'Request :: getContent()', Request :: getContent() ifadesinin statik olarak adlandırılmaması gerektiğini belirten bir hata sundu. Php: // girişini kullanmak, laravel'i kullanırken mükemmel bir çözüm gibi görünmüyor. Başka birinin farklı bir çözümü olup olmadığını görmeyi umuyorum – Ronnie

+0

Bu kodu çalışan Laravel 4.2 kodumdan kopyaladım. Laravel 5 – bernie

+0

'da neyin değiştiğine bir bakacağım, sanırım statik yöntem çağrısını örnek yöntem çağrısı ile değiştirmeniz gerekiyor. Düzenlememe bakın ve eğer işe yararsa bana bildirin. – bernie

İlgili konular