我正在尝试上传文件,我正在使用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,但没有结果。
答案 0 :(得分:1)
这一行:
$upload_url = CloudStorageTools::createUploadUrl('upload.handler', $options);
第一个arg应该是一个URL--尝试删除引号(假设upload.handler
指向您想要的位置),或者尝试将该arg替换为应用应重定向到的实际URL。 / p>
答案 1 :(得分:0)
如果它适用于本地开发服务器而不是远程服务器,我认为这是一个权限问题。要解决此问题,请尝试以下方法:
我建议您使用默认的GCS存储桶:
答案 2 :(得分:0)
一种更好的替代方案是将文件上传为请求可以处理的一组卡盘。