当我同时上传多个文件时,为什么Laravel仅存储最后一个文件?

问题描述 投票:0回答:1

我想一次上传多个文件。

前端Vue / Vuetify:

                                    <v-file-input
                                        v-model="files"
                                        id="files"
                                        ref="files"

                                        multiple
                                        label="Bild oder Datei hinzufügen"
                                        @change="handleFilesUpload"
                                    >

    export default {
        name: "HeaderNotesModal",
        data: () => ({
            media: [],
            files: [],
        }),

        methods: {

            submit () {
                this.$refs.form.validate()
                if (this.valid) {
                    this.store({
                        payload: {
                            title: this.title,
                            body: this.body
                        },
                        context: this
                    }).then(() => {
                        if (this.errors.length === 0) {
                            this.title = ''
                            this.body = ''
                            this.$refs.form.resetValidation()
                            this.form = false
                        }
                        if( this.files.length !== 0 ){
                            this.addMedia({ 'media': this.formData})
                        }
                    })
                }

            },

            handleFilesUpload(e){
                var self = this;
                var files = this.files;
                if(files.length > 0){
                    for(var i = 0; i< files.length; i++){
                        self.formData.append("file[]", files[i], files[i].name);
                    }
                }
            },
        },
        mounted() {
            this.fetchNotes()
        }
    }


export const addMedia = ({ state, commit }, { media}) => {

    return axios.post(`/api/notes/${state.note.id}/media`, media, {
        headers: {
            'Content-Type': 'multipart/form-data'
        }
    })

}

后端Laravel:

    public function store(Request $request, Note $note)
    {
        if($request->hasfile('file'))
        {
            foreach($request->file('file') as $file)
            {
                $name = time().'.'.$file->getClientOriginalExtension();
                $file->move(storage_path('uploads'), $name);
                $data[] = $name;
            }
        }
        return 'success';
    }

当我上传多个文件时,它仅存储最后一个文件。

有人可以帮忙吗?我现在尝试了6个小时,尝试所有可能的事情,但没有发现错误。

我尝试更改前端,然后更改后端。

我尝试过formData,但没有。

我尝试了几种文件名。

都没有成功

var_dump return var_dump($request->file('file'));

<pre class='xdebug-var-dump' dir='ltr'>
<small>/home/vagrant/code/7aio/app/Http/Controllers/Note/NoteMediaController.php:27:</small>
<b>array</b> <i>(size=2)</i>
  0 <font color='#888a85'>=&gt;</font> 
    <b>object</b>(<i>Illuminate\Http\UploadedFile</i>)[<i>392</i>]
      <i>private</i> 'test' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>boolean</small> <font color='#75507b'>false</font>
      <i>private</i> 'originalName' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'bgvqm7da.png'</font> <i>(length=12)</i>
      <i>private</i> 'mimeType' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'image/png'</font> <i>(length=9)</i>
      <i>private</i> 'error' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>0</font>
      <i>protected</i> 'hashName' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>private</i> 'pathName' <small>(SplFileInfo)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'/tmp/phpIIfLwD'</font> <i>(length=14)</i>
      <i>private</i> 'fileName' <small>(SplFileInfo)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'phpIIfLwD'</font> <i>(length=9)</i>
  1 <font color='#888a85'>=&gt;</font> 
    <b>object</b>(<i>Illuminate\Http\UploadedFile</i>)[<i>372</i>]
      <i>private</i> 'test' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>boolean</small> <font color='#75507b'>false</font>
      <i>private</i> 'originalName' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'Screenshot at Apr 27 07-35-08.png'</font> <i>(length=33)</i>
      <i>private</i> 'mimeType' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'image/png'</font> <i>(length=9)</i>
      <i>private</i> 'error' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>0</font>
      <i>protected</i> 'hashName' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>private</i> 'pathName' <small>(SplFileInfo)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'/tmp/phpdRhiD1'</font> <i>(length=14)</i>
      <i>private</i> 'fileName' <small>(SplFileInfo)</small> <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'phpdRhiD1'</font> <i>(length=9)</i>
</pre>

laravel vue.js vuetify.js
1个回答
0
投票

根据文档(https://laravel.com/docs/7.x/filesystem#file-uploads

移动方法可用于将现有文件重命名或移动到新位置:

因此,执行:$file->move(storage_path('uploads'), $name);将无法实现您想要的。

您可以改用;


    foreach($request->file('file') as $file)
    {
        $name = time().'.'.$file->getClientOriginalExtension();
        $file->store('uploads');
        $data[] = $name;
    }

© www.soinside.com 2019 - 2024. All rights reserved.