【问题标题】:Laravel 5.1 Uploading & Saving Base64 Image Sent From FormLaravel 5.1 上传和保存从表单发送的 Base64 图像
【发布时间】:2016-03-15 22:35:30
【问题描述】:

我使用 laravel 作为我的应用程序的后端,前端允许用户输入名字以及上传自己的照片。使用 html5 他们可以在页面上裁剪照片并发送裁剪的照片在表单上提交给我的控制器..

我收到以下错误:

ErrorException in testcontroller.php line 31:
Only variables should be passed by reference

这是我的视图,其中包含页面裁剪的表单和功能:

<form enctype="multipart/form-data" action="/testing" method="post" role="form">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
   <div class="form-group">
      <label for="name">Name</label>
         <input type="text" name="name" class="form-control" />
   </div>

   <div class="form-group">
      <label for="name">Title</label>
        <input type="text" name="title" class="form-control" />
   </div>


   <div class="form-group">
      <label>Image</label>
        <div class="dropzone" data-width="960" data-height="540" data-ajax="false" data-originalsave="true" style="width: 100%;">
         <input type="file" name="thumb" required="required" />
        </div>
   </div>

   <button type="submit" class="btn btn-default">Submit</button>

</form>

这是我的控制器,它在本地保存照片并最终使用我服务器上文件的 url 更新客户记录:

public function test(Request $request)
    {
        $error                    = false;

        $absolutedir            = dirname(__FILE__);
        $dir                    = '/tmp/';
        $serverdir              = $absolutedir.$dir;
        $filename               = array();

        foreach($_FILES as $name => $value) {
            $json                   = json_decode($_POST[$name.'_values']);
            $tmp                    = explode(',',$json->data);
            $imgdata                = base64_decode($tmp[1]);

第 31 行 $extension = strtolower(end(explode('.',$json->name)));

            $fname                  = substr($json->name,0,-(strlen($extension) + 1)).'.'.substr(sha1(time()),0,6).'.'.$extension;


            $handle                 = fopen($serverdir.$fname,'w');
            fwrite($handle, $imgdata);
            fclose($handle);

            $filename[]             = $fname;
        }  

        return view('upload');
    }

我收到以下错误:

ErrorException in testcontroller.php line 31:
Only variables should be passed by reference

第 31 行 $extension = strtolower(end(explode('.',$json->name)));

【问题讨论】:

  • 代码中的第 31 行是什么?因为知道它可能会有所帮助
  • 更新问题,第 31 行 $extension = strtolower(end(explode('.',$json->name)));

标签: php mysql laravel laravel-5.1


【解决方案1】:

原因是因为 end 方法需要引用现有的数组。

所以只需扩展代码。

$fileAry = explode('.',$json->name);
$extension = strtolower(end( $fileAry ));

您可能还想看看pathinfo 获取文件扩展名的方法。

【讨论】:

    【解决方案2】:

    这可能会对您有所帮助:

    Only variables should be passed by reference

    问题是,end 需要一个引用,因为它修改了数组的内部表示(即它使当前元素指针指向最后一个元素)。

    explode('.', $file_name) 的结果不能转为引用。这是 PHP 语言中的一个限制,可能出于简单原因而存在。

    所以而不是:

    $extension = strtolower(end(explode('.',$json->name)));
    

    尝试使用:

    $temp = explode('.',$json->name);
    $extension = strtolower(end($temp));
    

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      相关资源
      最近更新 更多