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

标签 php actionscript-3 flash 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);

我需要使用我的 Laravel 路由之一将编码上传到 JPG。我的路线如下:

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

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

如果我执行 return Response::json(['filedata' => $request]); 我得到的是:

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

我的 uploadFramegrab 函数现在很简单:

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

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

最佳答案

为此,您可以使用 Multipart.as (AS3 多部分表单数据请求生成器)来自 Jonas Monnier .它真的很容易使用,看看这个例子(使用来自 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);

然后,在 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 !');
}

希望对您有所帮助。

关于php - 从flash上​​传位图数据到laravel路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32658496/

相关文章:

php - 网站中的静态内容 - 而 URL 更改

flash - IE9 和 Flash z-index 问题

php - WordPress:跨 2 个数据库共享用户表

php - 是否可以在 WAMP 中使用 PHP HttpRequest?

actionscript-3 - 使用 as3crypto 多次登录 assiSTLy.com

actionscript-3 - AS3 类型错误 : Error #1007: Instantiation attempted on a non-constructor

php - 编码 HTML 时,浏览器并不总能检测到更改

javascript - 使用 $.post 将序列化数据从 jquery mobile 传递到 PHP

javascript - 如何从 Actionscript (Flash) 打开浏览器弹出窗口?

html - 如何使用 OpenFL 将一个简单的 Flash 项目 "convert"转换为 HTML5