Laravel文件上传到CentOs服务器并上传目录

时间:2019-12-09 04:53:30

标签: laravel

laravel的新用户,使用laravel的latest version,创建了一个应用程序,并根据文档here部署到服务器。我正在使用Intervantion来调整上传图像的大小。根据文档,这就是我所做的

  1. /home/username/laravel-project/中上传了完整的项目,该项目与public_html在同一目录中
  2. public_html下,我从/home/username/laravel-project/public移动了所有文件,并从public中删除了/home/username/laravel-project/文件夹
  3. 我已使用服务器的mysql凭据修改了env文件
  

我如何在控制器中使用Intervention上传图像并调整其大小

$save_path = 'product-images/';
$image_resize = Image::make($file->getRealPath());              
$image_resize->resize($width, $height);
$image_resize->save(public_path($save_path .$newFileName));
  

filesystems.php

'disks' => [
    'local' => [
    'driver' => 'local',
    'root' => storage_path('app'),
],
    'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public'),
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
],
    's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'url' => env('AWS_URL'),
],
],

问题1 :-上传图像时出现错误Can't write image data to path (/home/username/laravel-project/public/product-images/15758646011-500x550.jpg)。当我在public下重新创建/home/username/laravel-project/文件夹并以product-images权限创建777文件夹时,它可以工作,但是我不知道这是需要放置图像的地方存储或图像需要存储在public_html/project-images

问题2:- 当我尝试查看上传的图像后,解决了Issue 1中提到的上传问题后,这些图像没有显示,我注意到图像的URL为http://example.com/product-images/15758632231-500x550.jpg。我试图在单独的窗口中打开URL,并得到404 not found。我正在使用代码return url('product-images/'.$value);检索产品图片,其中$value = 15758632231-500x550.jpg来自数据库

1 个答案:

答案 0 :(得分:0)

对于问题1

  • 首先,您需要通过运行以下命令来创建从public/storagestorage/app/public的符号链接:

    php artisan storage:link
    
  • 您需要通过以下代码将图像存储在storage\app\public\images文件夹中:

    use Illuminate\Support\Facades\Storage;
    
    Storage::put('file.jpg', $contents);
    

这是来自Laravel's Documentation

  • 出于安全目的,切勿在公共目录中使用777权限。

对于问题2

  • 您可以使用Storage门面来获取文件的URL。 File URL 您可以这样编写代码。

    $url = Storage::url('file.jpg');
    return $url;