【问题标题】:broken symbolic link in LaravelLaravel 中断开的符号链接
【发布时间】:2020-03-15 19:38:35
【问题描述】:

我之前使用以下代码创建了一个表单来上传个人资料图片,

 
        $image = $request->file('avatar');
        $pass = Hash::make($request->password);
    if($image!=null){

        $avatar_name = $request->get('NIC').'.'.$image->getClientOriginalExtension();
        $folder = '/uploads/avatars/';
       // $filePath = $folder . $avatar_name;
        $this->uploadOne($image, $folder, 'public', $avatar_name);

        DB::table('users')->insert([
            [
            'avatar_id' => $avatar_name, 
            
          .
          .
          .
          .
           public function uploadOne(UploadedFile $uploadedFile, $folder = null, $disk = 'public', $filename = null)
    {
        $name = !is_null($filename) ? $filename : Str::random(25);

        $path =storage_path('uploads/avatars/'.$filename.'');

        if( Storage::exists($path)){
          
         Storage::disk('public')->delete('uploads/avatars/'.$filename.'');  
        }
        $file = $uploadedFile->storeAs($folder, $name, $disk);
        return $file;
    }
          
<form method="post" action="{{ route('edit_user.store') }}" enctype="multipart/form-data" autocomplete="off">
                            @csrf
                            
                            
                            <div class="pl-lg-4">
                            <input type="text" name="user_id_" id="input-user_id" hidden>
                            <fieldset name="Personal_information">
                            <legend class="heading-small text-muted mb-4" >Personal information</legend>
                                <div class="form-group{{ $errors->has('avatar') ? ' has-danger' : '' }}">
                                    <label class="form-control-label" for="input-avatar">{{ __('Avatar') }}</label>
                                    <input type="file" name="avatar" id="input-avatar" class="form-control form-control-alternative{{ $errors->has('avatar') ? ' is-invalid' : '' }}" >

                                    @if ($errors->has('avatar'))
                                        <span class="invalid-feedback" role="alert">
                                            <strong>{{ $errors->first('avatar') }}</strong>
                                        </span>
                                    @endif
                                </div>
然后我使用工匠命令“php artisan storage:link”创建了一个符号链接 它工作正常。

现在我用下面的代码制作另一个页面来上传一些文件,

$id = auth()->id();
        $timestamp_=now()->toDateTimeString();
        $doc = $request->file('leave_document');
        if($doc!=null){
            $leave_doc_name = $id.'_'.$timestamp_.'.'.$doc->getClientOriginalExtension();
            $folder = '/uploads/leave_documents/';
            $filePath = $folder . $leave_doc_name;
            $this->uploadOne($doc, $folder, 'public', $leave_doc_name);
        }else{
            $leave_doc_name =null;
        }
        if($request->leave_id_=="add"){
      
        DB::table('leave_requests')->insert([
            [
                'document_id'=>$leave_doc_name,
                
                .
                .
                .
                .
                .
                
    public function uploadOne(UploadedFile $uploadedFile, $folder = null, $disk = 'public', $filename = null)
    {
        $name = !is_null($filename) ? $filename : Str::random(25);

        $path =storage_path('uploads/leave_documents/'.$filename.'');

        if( Storage::exists($path)){
          
         Storage::disk('public')->delete('uploads/leave_documents/'.$filename.'');  
        }
        $file = $uploadedFile->storeAs($folder, $name, $disk);
        return $file;
    }
<form id="addEventForm" method="post" enctype="multipart/form-data" action="{{ route('leave.store') }}" autocomplete="off">
                            @csrf
                            <div class="pl-lg-4">
                            <input type="text" name="leave_id_" id="input-leave_id" hidden>

                            <div class="form-group{{ $errors->has('leave_document') ? ' has-danger' : '' }}">
                                    <label class="form-control-label" for="input-leave_document">{{ __('Document') }}</label>
                                    <input type="file" name="leave_document" id="input-leave_document" class="form-control form-control-alternative{{ $errors->has('leave_document') ? ' is-invalid' : '' }}" >
                                </div>

如您所见,两个代码是相同的。唯一的主要区别是存储文件夹。 (第一个用户使用“\storage\app\public\uploads\avatars”文件夹,第二个用户使用“storage\app\public\uploads\leave_documents”文件夹。

但是对于第二个,我收到一个错误提示

fopen(C:\xampp\htdocs\ACCHE_HR\storage\app/public\uploads/leave_documents/2_2020-03-15 19:31:14.jpg):无法打开流:没有这样的文件或目录

看来符号链接只适用于头像文件夹 我尝试使用“rm public/storage”命令删除符号链接,它也给了我以下错误,

rm : C:\xampp\htdocs\ACCHE_HR\public\storage 是一个 NTFS 连接点。使用 Force 参数删除或修改此对象。 在行:1 字符:1 + rm 公共/存储 + ~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (C:\xampp\htdocs\ACCHE_HR\public\storage:DirectoryInfo) [Remove-Item], IOException + FullyQualifiedErrorId : DirectoryNotEmpty,Microsoft.PowerShell.Commands.RemoveItemCommand

我到处搜索,也尝试找到一种方法来创建自定义符号链接,但失败了。 我如何解决这个问题,我也是 Laravel 的新手?

请帮忙!

【问题讨论】:

标签: php html laravel-6


【解决方案1】:

当我把我的文件名改成这样的时候

$leave_doc_name = 'abc.'.$doc->getClientOriginalExtension();

来自

$leave_doc_name = $id.'_'.$timestamp_.'.'.$doc->getClientOriginalExtension();

有效。

文件上传好像不支持时间戳功能。

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 2021-09-08
    • 2021-01-28
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多