我正在使用storage_path
保存我的图片,并将我的存储文件夹符号设为public_html
php artisan storage:link
在本地一切正常,当我上传图片时,它会上传到存储文件夹中,它的链接会显示在public
文件夹中,但由于我转到了实时主机和制作模式,我的图片会上传到存储空间文件夹,但public_html/storage
中没有任何内容,我无法将它们放在我的前端。
/config/filesystems.php
'public' => [
'driver' => 'local',
'root' => storage_path('app/public/'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
.env
FILESYSTEM_DRIVER=public
controller sample
if ($request->hasFile('image')) {
$image = $request->file('image');
$filename = 'page' . '-' . time() . '.' . $image->getClientOriginalExtension();
$location = storage_path('app/public/images/' . $filename);
Image::make($image)->resize(1200, 600)->save($location);
if(!empty($page->image)){
Storage::delete('images/' . $page->image);
}
$page->image = $filename;
}
任何想法?
答案 0 :(得分:2)
通过public_path
更改storage_path设置'public' => [
'driver' => 'local',
'root' => public_path('app/public_html/'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
if ($request->hasFile('image')) {
$image = $request->file('image');
$filename = 'page' . '-' . time() . '.' . $image->getClientOriginalExtension();
$location = public_path('app/public_html/images/' . $filename);
Image::make($image)->resize(1200, 600)->save($location);
if(!empty($page->image)){
Storage::delete('images/' . $page->image);
}
$page->image = $filename;
}
如果不起作用,您可以尝试:
$path = base_path().'/../public_html/images';
答案 1 :(得分:2)
我刚遇到此问题,而这就是我解决该问题的方法,而无需通过SSH进入服务器或运行CronJob:
对于 Laravel 5 + (未经较低版本测试)
您可以在路由/控制器内部使用Artisan::call()
方法来执行工匠命令,而无需使用终端。
$exitCode = Artisan::call('storage:link', [] );
echo $exitCode; // 0 exit code for no errors.
答案 2 :(得分:2)
一种解决方案是将文件和图像直接上传到public_html文件夹。 像这样更改 config / filesystems.php :
'public' => [
'driver' => 'local',
'root' => public_path() . '/../public_html/admin-upload',
'url' => env('APP_URL').'/admin-upload',
'visibility' => 'public',
],
答案 3 :(得分:2)
我知道这是一个旧线程,但是我们可以通过在Config / filesystem.php中进行一些更改来更改它
替换
@JsonCreator
public static AnimalType fromString(String key) {
return displayName == null
? null
: AnimalType.valueOf(key.toUpperCase());
}
使用
'links' => [
public_path('/storage') => storage_path('app/public'),
],
您可以检查此存储库。我已经在其中实现了 https://github.com/ali-chaudhry/Laravel-7-Boilerplate-with-Spatie-uuid-Unishrp-filemanager-integeration
答案 4 :(得分:1)
感谢您的所有帮助,我尝试在我的服务器上运行php artisan storage:link
,并且出于安全原因我发现我的服务器已禁用symlink
。
所以我更改了所有图片上传功能,以便在我的public
文件夹而不是storage
文件夹中上传图片,现在一切正常。
答案 5 :(得分:1)
从公用目录中删除存储文件夹 然后使用这条路线
Route::get("/storage-link", function () {
$targetFolder = storage_path("app/public");
$linkFolder = $_SERVER['DOCUMENT_ROOT'] . '/storage';
symlink($targetFolder, $linkFolder);
});
答案 6 :(得分:1)
我为解决这个问题做了什么:
php artisan storage:link
答案 7 :(得分:0)
从公共目录删除文件夹存储并在Cron Job中运行此命令[一次]
ln -s / home / public_html / storage / app / public / home / dev5 / public_html / public / storage
答案 8 :(得分:0)
您还可以先删除文件夹storage:link,然后在主机中打开终端并命令php artisan storage:link。如果您的托管支持符号链接可以正常工作
答案 9 :(得分:0)
我遇到了同样的问题,为了解决它,我不得不删除已经创建的文件夹的存储,然后我重新启动命令。 PHP工匠存储:链接
答案 10 :(得分:-1)
我看到问题已得到解答,但我想提出另一种我认为很简单的解决方案。
转到路由文件夹your-app-folder/routes/web.php
并按如下所示注册新路由
Route::get('/linkstorage', function () {
Artisan::call('storage:link')
});
然后转到您的网站www.example.com/linkstorage
,它将带您到空白页。
而已。将创建存储文件夹。希望对您有所帮助。
答案 11 :(得分:-3)
解决方案: 将您的应用程序上传到实时服务器后。 只要检查一下公共目录中是否有存储文件夹即可。 Check the folder stucture
只需从公共目录中删除存储文件夹。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Socket.io</title>
</head>
<body>
<h1>Communication avec socket.io !</h1>
<div id='r'>Connection..</div>
<script src="jquery.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('message', function(message) {
document.getElementById('r').innerHTML = message;
})
</script>
</body>
</html>
然后,从腻子软件访问您的主要Laravel项目文件夹,并实时运行此命令。
请记住配置您的 .env 文件APP_URL = {您的实时服务器IP},然后配置以下命令。
[app/public/storage]
它将在与 APP_URL 关联的公用文件夹中创建一个新的存储链接。