我是laravel的新手。我尝试上传图像,但是在getClientsize中出现错误。我尝试在Google中检查解决方案。我按照它编辑post_max_size和upload_max_size文件,但对我来说仍然不起作用。 任何人都可以帮助解决此问题。我在下面附上了代码。
控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\file;
use Illuminate\Support\Facades\Input;
use Illuminate\Http\UploadedFile;
class testing extends Controller
{
public function store(Request $request)
{
$user = new file;
$user->title = Input::get('name');
if(Input::hasFile('image')){
$file=Input::file('image');
$file->move(public_path().'/images/', $file);
$user->name=$file->getClientoriginalName();
$user->size=$file->getClientsize();
$user->type=$file->getClientMimeType();
}
$user->save();
return "data saved";
}
答案 0 :(得分:1)
请更改
getClientsize() -> getClientSize()
但是,如果没有帮助-您的问题不在您的php文件中,而是在php配置文件中。默认情况下,您可以上传2M(兆字节)的文件。
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
但是您可以在这里更改它:
在.htaccess中添加行:
php_value upload_max_filesize 50M
或Ubuntu:
/etc/php/7.1(您的版本)/apache2/php.ini(查找upload_max_filesize, 并覆盖它)
或
/etc/php/php.ini
编辑文件后-重新启动apache
答案 1 :(得分:0)
通过阅读laravel 6. *和php 7.3的文档,您可以看到可以使用store
方法上传文件。
如果要在第一次运行php artisan vendor:publish
并在config->filesystems.php
中将文件存储在public或public_html中,请定义新磁盘,例如名称为public_local
并将此磁盘的根目录设置为public地址:< / p>
'public_local' => [
'driver' => 'local',
'root' => public_path(),
],
然后,为了将文件存储在此磁盘中,可以使用为文件设置唯一名称的存储方法,或使用具有自定义名称的storeas: 使用存储方法:
$path = $request->file('image_url')->store($imagePath, 'public_local');
$path = $request->file('image_url')->storeAs($imagePath, 'custom_name', 'public_local');
答案 2 :(得分:0)
我花了将近8个小时才找出原因,发现:
如果您在控制器中上载文件(使用$ file-> move(public_path()。'/ images /',$ file);),并且如果您再次使用'在模型中使用HasMediaTrait的特征。
原因: 在已经使用语句'$ file-> move(public_path()。'/ images /',$ file);'上传的控制器文件中; 再次,如果您在模型中使用'use HasMediaTrait'特性,系统尝试再次上传文件,则会导致此错误。
解决方案: 如果您在控制器中上载,则无需使用模型“使用HasMediaTrait”特征,否则只需在控制器中删除文件上载逻辑,而在模型中使用特征(使用HasMediaTrait)。 >
我希望这能提供更多见识。
答案 3 :(得分:0)
可能的原因是因为文件已从tmp移至其分配的路径,所以不再存在。因此,从tmp文件读取文件大小是无效操作。
可能的解决方案:在移动文件之前读取文件大小。为我工作。
if ($req->hasFile('uploadedFile'))
{
$file = $req->file('uploadedFile');
$filesize = $file->getSize();
$filename = $file->getClientOriginalName();
if ($file->move('upload/', $filename))
{
$insert = DB::table('table')->insert(["filename" =>$filename,
"size" =>$filesize]);
}
}