将位图数据从flash上​​传到laravel路由

Ron*_*nie 6 php flash actionscript-3 laravel laravel-5

我有一个内置AS3的视频播放器.我使用以下代码拍摄视频播放器的快照:

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);
Run Code Online (Sandbox Code Playgroud)

我需要使用我的一个Laravel路线将编码上传到JPG.我的路线看起来像:

Route::post('assets/uploadframegrab', 'AssetController@uploadFramegrab');

当我运行AS3代码时,它调用laravel路由,但我的$request变量似乎是空的.Request Payload网络信息选项卡上显示所有标题和内容的属性包含的内容类似于图像文件的来源.

如果我做了return Response::json(['filedata' => $request]);所有我得到的是这个:

filedata: {
  attributes: {},
  request: {},
  query: {},
  server: {},
  files: {},
  cookies: {},
  headers: {}
}
Run Code Online (Sandbox Code Playgroud)

我的uploadFramegrab功能现在只是这个:

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

我在网上搜索过,但是找不到任何专门用于从flash上​​传到laravel的内容.我已经完成了javascript to laravel没问题.谁知道这可能是什么?如果您想了解更多信息,请询问.

akm*_*ozo 2

为此,您可以使用Jonas Monnier的Multipart.as(AS3 多部分表单数据请求生成器)。它真的非常容易使用,看一下这个示例(使用 github 项目页面的基本示例):

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);
Run Code Online (Sandbox Code Playgroud)

然后,在 PHP 端,您按照通常的方式进行操作:

public function upload(\Illuminate\Http\Request $request)
{        
    if($request->hasFile('image'))
    {            
        $file = $request->file('image');            
        $upload_success = $file->move($your_upload_dir, $file->getClientOriginalName());

        if($upload_success)
        {
            return('The file "'.$request->get('name').'" was successfully uploaded');
        } 
        else 
        {
            return('An error has occurred !');
        }

    }        
    return('There is no "image" file !');
}
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。