首页 > 解决方案 > 如何使用 laravel 修复循环插入文件(获取不可见数据)

问题描述

我有一个问题,我有一个模块,我需要将图像和轮播细节插入到存储和数据库中。但图像并未完全插入数据库。只有文件名。该模块工作正常并正确插入我的本地主机服务器。将项目上传到服务器后出现问题,然后我尝试上传轮播图像,当我按下按钮并成功插入未插入数据库的数据表时,会发生这种情况。我真的不明白为什么上传功能无法正常工作,在页面刷新发生后我的脚本选择 pdf 文件等。

为了理解我的陈述,我将向你们展示示例输出然后运行。

  1. 我只上传的正确文件是那个 .png 文件,但是,碰巧有像 pdf 这样的文件,我真的不明白它来自哪里。

问题: 问题

数据库:

内容表:

内容表

内容文件:

内容文件

阿贾克斯:

var carousel_data = new FormData();

$('#carousel_image').on('change',function(e){

        var files = e.target.files;

        $.each(files, function(i, file) {

            carousel_data.append('files[]', file);

        });
 });




$('#btn_carousel').on('click',function(e){

    e.preventDefault();
    var carousel_title = $('#carousel_title').val();
    var carousel_desc = $('#carousel_desc').val();
    var carousel_url = $('#carousel_url').val();

    carousel_data.append('carousel_title', carousel_title);
    carousel_data.append('carousel_desc', carousel_desc);
    carousel_data.append('carousel_url', carousel_url);
    $.ajax({

        url:'/insert_carousel_content',
        type:'post',
        data:carousel_data,
        dataType:'JSON',
        processData: false,
        contentType: false,
        success:function(res) {
            if(res == 'Success') {
                alert('Successfully Inserted');
            }
            else
            {
                alert('Please Fill The Blank.');
            }

            location.reload();
        },
        error:function(err) {
            alert('Failed To Insert');

        }
    })

});

控制器:

public function insert_carousel_content(Request $request) {

    $file_upload = $request->file('files');

    $carousel_title = $request->get('carousel_title');
    $carousel_desc = $request->get('carousel_desc');
    $carousel_url = $request->get('carousel_url');

    $author = Auth::user()->id;

    $now = new DateTime();

    DB::insert('INSERT INTO audit_trail (user,page,action,when_created) VALUES (?,?,?,?) ',[
        $author,
        'Carousel',
        'Inserting',
        $now
    ]);

    if($request->hasFile('files')) {

        DB::insert('INSERT INTO content (content_author,content_title,content_desc,content_link,content_page,content_status,when_created) VALUES (?,?,?,?,?,?,?) ',[

        $author,
        $carousel_title,
        $carousel_desc,
        $carousel_url,
        'carousel',
        'Approved',
        $now

        ]);




        $last_id_insert = DB::select('SELECT LAST_INSERT_ID() as id FROM content');
        foreach($last_id_insert as $result)
        {
          $id_last_inserted = $result->id;
        }

        foreach($file_upload as $value)
        {


            $name=$value->hashName();

            $value->move(public_path().'/storage/',$name);

            DB::insert('INSERT INTO content_files (content_id,file_name) VALUES (?,?) ',[

                 $id_last_inserted,
                 $name,



            ]);
        }

        return response()->json('Success');
    }
    else {

        DB::insert('INSERT INTO content (content_author,content_title,content_desc,content_link,content_page,content_status,when_created) VALUES (?,?,?,?,?,?,?) ',[

        $author,
        $carousel_title,
        $carousel_desc,
        $carousel_url,
        'carousel',
        'Approved',
        $now

        ]);

         return response()->json('Success');
    }

}

图片来源:

图片来源

用户显示:

用户展示

标签: phplaravel

解决方案


如您所见,图像已成功存储到数据库中,但问题可能是您的存储路径没有正确的访问权限。(Chmod 755)

要指定,只需在 ssh 中写入sudo chmod -R 755 storage/

从您的帖子中,我可以看到 image_name 存储在数据库表中,但图像未存储在您的服务器上。

要显示存储中的图像,您应该使用:Storage::get('file_name.jpg');

你可以在这里看到:https ://laravel.com/docs/master/filesystem#retrieving-files


推荐阅读