laravel livewire使用文件名保存文件

bxjv4tth  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(134)

我试图保存上传的pdf文件,但pdf文件名在存储链接上更改。保存时有没有办法保留原来的文件名?

public $code, $pdfs;

public function mount(Applicant $applicant)
    {
        $this->code = substr(str_shuffle(str_repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 5)), 0, 3).Carbon::createFromFormat('Y-m-d H:i:s', now())->format('md').rand(100, 999);
    }

public function submit(Request $request)
    {
 
        $this->validate([
             'pdfs.*' => 'mimes:pdf',
          ]);

        $filenames = collect($this->tests)->map->store($this->code.'/', 'public');
        return redirect()->route('careers.vacant');
    }

这是我刀

<form wire:submit.prevent="submit" class="pt-3" enctype="multipart/form-data">
<div class="form-group">
        <label class="form-label required" for="code" >Application {{ trans('fields.code') }}</label>
        <input class="form-control" type="text" name="code" id="code" wire:model.defer="code" >
        <div class="validation-message">
            {{ $errors->first('code') }}
        </div>
        <div class="help-block">
            {{ trans('fields.code_helper') }}
        </div>
    </div>

<input type="file" name="pdf" id="pdf" wire:model="pdfs" multiple >
    <div wire:loading wire:target="pdfs">Uploading...</div>
    @error('pdfs.*') <span class="error">{{ $message }}</span> @enderror

<div class="form-group">
        <button class="mr-2 btn btn-indigo" type="submit">
            {{ trans('global.submit') }}
        </button>
        <a href="{{ route('admin.applicants.index') }}" class="btn btn-secondary">
            {{ trans('global.cancel') }}
        </a>
    </div>
</form>

我需要像这样保存PDF:

$filenames = collect($this->tests)->map->store($this->code.'/'.pdfFileName, 'public');

编辑:

foreach ($this->tests as $file) {
            $name = $file->getClientOriginalName();
            $file->store('moca/'.$this->code.'/'.$name, 'public');

        }

我尝试了这段代码,但在路径$name成为一个文件夹,而不是成为文件的名称

vddsk6oq

vddsk6oq1#

livewire上传的文件对象类型为TemporaryUploadedFile,扩展了UploadedFile类。所以你可以使用Laravel的所有UploadedFile方法。
首先,你可以像这样得到文件名:

$filename = $file->getClientOriginalName();

然后使用此名称保存文件。

$path = $file->storeAs('destination/folder', $filename ,'public');

如果一切正常,文件应保存在:storage/app/public/destination/folder/$filename

$path变量将等于:destination/folder/$filenamefalse如果操作失败。为此,需要正确配置公共磁盘。Laravel docs -公共磁盘。

默认情况下,公共盘使用本地驱动,并将其文件存储在storage/app/public
要从Web访问这些文件,您需要创建一个从public/storagestorage/app/public的符号链接。
要通过Web访问该文件,您必须使用以下代码:

$web_url = asset('storage/'.$path);
wmtdaxz3

wmtdaxz32#

你可以试试这个:
$request->file('pdf')->getClientOriginalName()将返回文件的原始名称

相关问题