使用Vue和Laravel上传文件

时间:2018-03-16 20:22:32

标签: laravel laravel-5 vue.js

我正在尝试使用vue和laravel进行简单的用户头像更新,我无法弄清楚我在这里做错了什么。

我有一个带有此表单和此脚本的vue组件:

<form @submit.prevent="updateAvatar" action="#" method="POST" enctype="multipart/form-data">
        <div class="form-group">
          <label name="task-title">Incarca poza:</label>
          <input @change="newAvatar" id="avatar" type="file" name="avatar">
        </div>
        <button type="submit" class="btn btn-primary general-task-btn">Actualizeaza</button>
      </form>

<script>
export default{
    props: ['userid'],
    data(){
        return{
            avatar: {
            }
        }
    },
    methods: {
    newAvatar(event) {
       let files = event.target.files;
       if (files.length) this.avatar = files[0];
    },
    updateAvatar: function () {
        let data = new FormData();
        data.append('file', this.avatar);
        axios.put('/api/user/updateAvatar', data)
                .then(res => {
                    console.log(res);
                 }) 
                 .catch(error => console.log(error));
        // window.location.href = "/profile";
      }
    }
}

控制器功能:

    public function updateAvatar(Request $request)
{
    $user = Auth::user();
    $avatar = $request->file('file');
    $filename = time() . '.' . $avatar->getClientOriginalExtension();
    Image::make($avatar)->save( public_path('/uploads/avatars' . $filename) );

    $user->avatar = $filename;

    $user->save();
}

我真正不知道的是如何访问我使用axios发送的formData。服务器告诉我这是空的。 在发出put请求之前我尝试了console.log formData,但即使内容在avatar对象中,我也得到一个空的obj。当我在线阅读时,您无法看到formData的内容,因此我无法确定数据是否正确发送。 也许你们可以为我说清楚。

1 个答案:

答案 0 :(得分:0)

这似乎与这个问题有关 https://github.com/laravel/framework/issues/13457

尝试替换

{{1}}