当前位置: 首页 > 知识库问答 >
问题:

使用存储器删除Laravel 8图像::删除不工作

丌官寒
2023-03-14

我有一个Laravel项目,我试图用Storage::delete删除图像,但它似乎不起作用。我的图像位于storage\app\public\uploads文件夹中。我可以上传和编辑图像,但删除不起作用。我使用的是Laravel 8。

产品控制器。PHP

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ProductsController extends Controller
{

public function store(Request $request){

    request()->validate([                 
        'product_name' => ['required', 'min:2', 'max:50'],
        'product_price' => 'required',
        'product_desc' => ['required', 'min:2', 'max:50'],
        'product_img' => 'image|nullable|max:1999'  
    ]);

     // Handle File Upload
     if($request->hasFile('product_img')){
        // Get filename with the extension
        $filenameWithExt = $request->file('product_img')->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('product_img')->getClientOriginalExtension();
        // Filename to store
        $fileNameToStore= $filename.'_'.time().'.'.$extension;
        // Upload Image
        $path = $request->file('product_img')->storeAs('public/uploads', $fileNameToStore);
     }


    $product = new Product();
    $product->product_name = request('product_name');
    $product->product_price = request('product_price');
    $product->product_desc = request('product_desc');
     if($request->hasFile('product_img')){
        $product->product_img = $fileNameToStore;
     }
    $product->save();


    return redirect('/posts');
}
    
    public function destroy($id){
        $product = Product::findOrFail($id);

        Storage::delete('public/uploads' . $product->product_img);
        
        $product->delete();
        return redirect('/products');
    }
 
}

PHP

@extends('layout.mainlayout')

@section('content')
<div class="product-wrapper">
  
    <div class="container">

            <div class="row">
          
                @foreach ($products as $product)

                <div class="col-md-4 col-12">
           
                    @auth
                        <a href="/products/edit/{{ $product->id }}" class="btn btn-light">Edit</a>
                        <a href="/products/delete/{{ $product->id }}" class="btn btn-danger">Delete</a>
                    @endauth

                </div>

                @endforeach
             
            </div>
    </div>
</div>
@endsection

网状物PHP

Route::get('/products',[\App\Http\Controllers\ProductsController::class,'products']);
Route::post('/products/store',[\App\Http\Controllers\ProductsController::class,'store'])->middleware('auth');
Route::get('/products/delete/{product}', [\App\Http\Controllers\ProductsController::class,'destroy'])->middleware('auth');

配置/文件系统。PHP

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. The "local" disk, as well as a variety of cloud
    | based disks are available to your application. Just store away!
    |
    */

    'default' => env('FILESYSTEM_DRIVER', 'local'),

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Here you may configure as many filesystem "disks" as you wish, and you
    | may even configure multiple disks of the same driver. Defaults have
    | been setup for each driver as an example of the required options.
    |
    | Supported Drivers: "local", "ftp", "sftp", "s3"
    |
    */

    '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'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Symbolic Links
    |--------------------------------------------------------------------------
    |
    | Here you may configure the symbolic links that will be created when the
    | `storage:link` Artisan command is executed. The array keys should be
    | the locations of the links and the values should be their targets.
    |
    */

    'links' => [
        public_path('storage') => storage_path('app/public'),
    ],

];

共有1个答案

邢硕
2023-03-14
File::delete(public_path('storage/'.$imagenamehere));

请尝试此代码,并确保添加文件类。

 类似资料:
  • 我想删除一个本地图像标记(“存储库”/“标记”组合)。有可能吗? 我如何才能在仅与一个图像ID相关联的多个标记中删除任何一个标记而不删除其他标记?在我的情况下,我只想排除hiworld存储库。我可以删除图像,因此也可以删除与之相关联的所有标签,但这不是我想要做的。下面是输入命令docker images时显示的内容。 提前道谢。

  • 我正在尝试从数据库中删除记录,以及从服务器中删除该记录的上载图像。我在控制器中有这个功能。 取消链接(C:\xampp\htdocs\larapro\public\newuploads\ 如果我使用 它显示: 解除关联(C: mpp\htdocs\larapro\Public\ewaddads{1470667358.png}):无效参数 我只是想知道为什么链接中的x和n丢失了。

  • 我正在开发一个功能,以删除上传的文件。我目前可以删除云Firestore中的引用,但无法将其从存储中删除。下面的代码应该从存储中删除,但它不起作用 错误消息是“没有请求的auth标记。StorageException已发生。对象在位置不存在。HttpResult:404”。我以为这个问题与我的fileUrl字段有关,但我不确定。fileUrl是下载图像的url,例如,如果我将url复制并粘贴到we

  • 正如标题所示,我无法使用delete()选项。我在网上发了很多帖子,但都找不到正确的答案。我正在Homestead上使用Laravel5.5(一周前安装,最新版本左右)。 让我给你一些代码,我真的希望有人能帮助我。 这让我头痛,奥氮平快用完了。请告诉我我做错了什么,如果遗漏了什么,请告诉我! 这是我的控制器: 这是我的索引页(索引与后端的管理索引相同: 然后是路线: 然后政策: 最后是中间件: 在

  • 存储过程被创建后,就会一直保存在数据库服务器上,直至被删除。当 MySQL 数据库中存在废弃的存储过程时,我们需要将它从数据库中删除。 MySQL 中使用 DROP PROCEDURE 语句来删除数据库中已经存在的存储过程。语法格式如下: DROP PROCEDURE [ IF EXISTS ] <过程名> 语法说明如下: 过程名:指定要删除的存储过程的名称。 IF EXISTS:指定这个关键字,

  • 我的问题是,我可以删除它们而不损害我的整个应用程序吗?