php - 如何使用 laravel 修复循环插入文件(获取不可见数据)
问题描述
我有一个问题,我有一个模块,我需要将图像和轮播细节插入到存储和数据库中。但图像并未完全插入数据库。只有文件名。该模块工作正常并正确插入我的本地主机服务器。将项目上传到服务器后出现问题,然后我尝试上传轮播图像,当我按下按钮并成功插入未插入数据库的数据表时,会发生这种情况。我真的不明白为什么上传功能无法正常工作,在页面刷新发生后我的脚本选择 pdf 文件等。
为了理解我的陈述,我将向你们展示示例输出然后运行。
- 我只上传的正确文件是那个 .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');
}
}
图片来源:
用户显示:
解决方案
如您所见,图像已成功存储到数据库中,但问题可能是您的存储路径没有正确的访问权限。(Chmod 755)
要指定,只需在 ssh 中写入sudo chmod -R 755 storage/
从您的帖子中,我可以看到 image_name 存储在数据库表中,但图像未存储在您的服务器上。
要显示存储中的图像,您应该使用:Storage::get('file_name.jpg');
你可以在这里看到:https ://laravel.com/docs/master/filesystem#retrieving-files
推荐阅读
- javascript - svg 动画动画不流畅
- c - 找不到 /lib64/ld-linux-x86-64.so.2
- python - 如何使用 python 计算 xml 特定元素的数量?
- selenium - 在 VM 上通过 jenkins 运行 Selenium,屏幕大小
- angularjs - 如何限制nodejs中的隐式字符串转换
- postgresql - 无法在 postgres 的 encrypt() 函数中使用字符串数据类型
- azure - 通过 Dynamics 365 插件中的应用服务身份验证访问函数应用
- oracle - 列名在作为聚合函数 MIN() 的结果引用后变为无效
- r - 使用 dplyr 右连接使行列
- javascript - 用于触发网站(全局)搜索的 mmenu 搜索