簡體   English   中英

部署在谷歌應用引擎上的 Laravel 不上傳文件

[英]laravel deployed on google app engine doesn't upload files

我正在嘗試上傳文件,我正在使用 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('/');

它顯示一個帶有文件屬性的數組。 但是當使用谷歌應用引擎部署時,此代碼返回 NULL。 在閱讀了 php 的谷歌應用引擎文檔后,我明白問題是在谷歌應用引擎中你不能寫入文件系統應用程序,在這個鏈接中我發現了沒有 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

我知道這是一個錯誤,因為表單帖子不是指向路線,而是指向變量。 圖像存儲在谷歌應用引擎中,但問題是此代碼不會發布到控制器以將文件路徑保存在數據庫中。 我嘗試了其他方法,但沒有結果。 我也跟着步驟通過在步驟部6 此外,我嘗試了Ajessup 包,但沒有結果。

有了這條線:

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

第一個 arg 應該是一個 URL——嘗試刪除引號(假設upload.handler指向你想要的位置),或者嘗試用應用程序應該重定向到的實際 URL 替換該 arg。

如果它適用於您的本地開發服務器而不是您的遠程服務器,我認為這是一個權限問題。 要修復它,請嘗試以下操作:

  1. 進入雲控制台
  2. 轉到您的項目、存儲、雲存儲、存儲瀏覽器
  3. 檢查您的存儲桶是否存在,以及它是否具有可在appengine 儀表板中找到的服務帳戶名稱的寫入權限

我建議您使用默認的 GCS 存儲桶:

  1. 轉到appenigne 儀表板,應用程序設置
  2. 如果你有一個按鈕,上面寫着:生成雲集成項目,點擊它
  3. 如果那里列出了 Google Cloud Storage 存儲桶,請將其用作“images_upload”存儲桶的替代方案。 它應該類似於“appid.appspot.com”

這種情況的更好替代方法是將文件作為一組請求可以處理的大小的夾頭上傳。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM