Laravel + vue.js文件上传

时间:2016-10-23 17:57:03

标签: javascript php laravel vue.js form-data

我已经成功上传了vue.js 1.0这样的文件(发布请求):

store () {
            this.storingMessage = true;
            var form = new FormData();
            form.append('subject', this.message.subject);
            form.append('message', this.message.message);
            form.append('topic_id', this.message.topic_id);

            for(var key in this.message.attachment) {
                form.append('attachment[' + key + ']', this.message.attachment[key]);
            }

            MessageService.store(this, form);
        }

但是当我尝试更新这样的文件时(put request):

update () {
            this.updatingMessage = true;
            var form = new FormData();
            form.append('subject', this.message.subject);
            form.append('message', this.message.message);
            form.append('slug', this.message.slug);

            for(var key in this.message.attachment) {
                form.append('attachment[' + key + ']', this.message.attachment[key]);
            }

            MessageService.update(this, form);
        }

在我的控制器中,dd($request->all())结果为[]

那么为什么它不能用put ????!?!?!?

服务

store (context, form) {
        return Vue.http.post('/api/message', form)
            .then(({data}) => {
                context.success();
            }, (error) => {
                context.error(error.data);
            });
    },

    update (context, form) {
        return Vue.http.put('/api/message/' + form.get('slug'), form)
            .then(({data}) => {
                context.success();
            }, (error) => {
                context.error(error.data);
            });
    }

1 个答案:

答案 0 :(得分:1)

根据Laracast Discussion,使用put方法和formData对象时,似乎存在一个问题,一种方法是避免使用方法欺骗。

请在您的更新方法

中尝试此操作
let data = { _method : 'PATCH' , form : form}

return Vue.http.post('/api/message/' + form.get('slug'), data)
    .then(({data}) => {
        context.success();
    }, (error) => {
        context.error(error.data);
    });

在这种情况下,您的控制器中的数据将以form显示

$request->form