【发布时间】:2014-06-26 19:04:15
【问题描述】:
我正在尝试上传文件,我正在使用 laravel 4 并在谷歌应用引擎上部署。本地文件上传工作,但是当使用谷歌应用引擎部署时它没有。 这是我的代码:
查看:
{{ 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。在阅读了 php 的 google app engine 文档后,我了解到问题是在 google app engine 中您无法写入文件系统应用程序,而在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
我知道这是一个错误,因为表单 post 没有指向路由,而是指向变量。该图像存储在谷歌应用引擎中,但问题是此代码不会发布到控制器以将文件路径保存在数据库中。我尝试了其他方法,但没有结果。我还逐步按照this 中的第 6 节进行操作。此外,我尝试了Ajessup package,但没有结果。
【问题讨论】:
-
您似乎并没有以 Laravel 4 打算使用的 MVC 方式做事 - 上传处理程序实际上应该通过路由 (@987654325) 指向控制器 (laravel.com/docs/controllers) @),并且在 Routes 配置中,您可以指定给定路由允许哪些 http 方法。包括云存储库也应该真正在视图之外处理。
-
@glendaviesnz 我编辑了我的问题。看看
-
Doh - 抱歉 - 在我的第一条评论中忽略了在应用程序引擎上运行 Laravel 的影响,这会使事情稍微复杂化,就像你通常做的那样通过控制器上传文件 - 希望其他人有为您解决此问题 - 可以选择将 Laravel Storage 指向 Cloud Storage,如 gae-php-tips.appspot.com/2013/10/22/… 所述。
-
@glendaviesnz 我试过了,但还是一样。它不会将文件上传的属性从视图传递到控制器。我还有什么选择?我可以使用谷歌应用引擎在谷歌驱动器中上传文件吗?
-
@Stuart Langley 你能看看我的问题吗
标签: php google-app-engine laravel