部署在谷歌应用引擎上的laravel无法上传文件

时间:2014-06-26 19:04:16

标签: php google-app-engine laravel

我正在尝试上传文件,我正在使用laravel 4并在Google应用引擎上部署。本地文件上传有效,但是当使用谷歌应用引擎进行部署时,它并不适用。 这是我的代码:

视图:

{{ Form::model($v, array('files' => true,'route' => array('upload.image', $v->id),'method' => 'post','class'=>'form-horizontal','id'=>'upload-images')) }}
            {{ Form::file('image') }}
            <br>
            {{ Form::submit('Add Photo', array('class' => 'btn btn-primary' )) }}
            {{ Form::close() }}

控制器

$file = Input::file('image');
        dd($file);
        $destinationPath = 'img_gallery/';
        $extension = $file->getClientOriginalExtension();
        $filename = 'img_' . $id . '.' . $extension;
        $file->move($destinationPath, $filename);

        $car = Car::find($id);
        $car->Pic = $filename;
        $car->save();
        return Redirect::to('/');

并显示一个包含文件attr的数组。但是当使用谷歌应用引擎部署时,此代码返回NULL。阅读完谷歌应用程序引擎文档后,我明白问题是,在谷歌应用程序引擎,你不能写入文件系统应用程序,并在this link我发现没有laravel的PHP代码,并试图与我的如下:

upload_test.blade.php

require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';

use google\appengine\api\cloud_storage\CloudStorageTools;

$options = [ 'gs_bucket_name' => 'images_upload'];
$upload_url = CloudStorageTools::createUploadUrl('upload.handler', $options);
?>
<div class="body">
    <form action="<?php echo $upload_url ?>" enctype="multipart/form-data" method="post">
        <input type="file" name="uploaded_files" size="40">
        <input type="submit" value="Send">
    </form>
</div>

控制器

 public function upload_image($id) {
        $file = Input::file('image');
        dd($file);
}

路线

Route::group(array('before' => 'auth'), function() {
    Route::post('upload_handler', array('as' => 'upload.handler', 'uses' => 'CarController@upload_handler'));
});

控制器

public function upload_handler() {
        var_dump($_FILES);
    }

但是显示:

  

Symfony \ Component \ HttpKernel \ Exception \   MethodNotAllowedHttpException

我知道这是一个错误,因为表单帖子没有指向路由,而是指向变量。图像存储在谷歌应用程序引擎中,但问题是此代码不会发布到控制器以保存文件在DB中的路径。我尝试了其他方法,但没有结果。我还在this中逐步执行了第6节。此外,我尝试Ajessup package,但没有结果。

3 个答案:

答案 0 :(得分:1)

这一行:

$upload_url = CloudStorageTools::createUploadUrl('upload.handler', $options);

第一个arg应该是一个URL--尝试删除引号(假设upload.handler指向您想要的位置),或者尝试将该arg替换为应用应重定向到的实际URL。 / p>

答案 1 :(得分:0)

如果它适用于本地开发服务器而不是远程服务器,我认为这是一个权限问题。要解决此问题,请尝试以下方法:

  1. 转到cloud console
  2. 转到您的项目,存储,云存储,存储浏览器
  3. 检查您的存储桶是否存在以及是否具有可在appengine dashboard
  4. 中找到的服务帐户名称的写入权限

    我建议您使用默认的GCS存储桶:

    1. 转到appenigne dashboard,应用程序设置
    2. 如果您有一个按钮,其中包含:生成云集成项目,请单击
    3. 如果其中列出了Google云端存储分区,请将其用作“images_upload”存储分区的替代方案。它应该类似于“appid.appspot.com”

答案 2 :(得分:0)

一种更好的替代方案是将文件上传为请求可以处理的一组卡盘。

示例项目-https://github.com/pionl/laravel-chunk-upload-example