如何在 vue 组件上使用 axios 传递上传的文件和传递参数?

Posted

技术标签:

【中文标题】如何在 vue 组件上使用 axios 传递上传的文件和传递参数?【英文标题】:How can I pass file uploaded and pass parameter with axios on vue component? 【发布时间】:2018-08-04 21:11:14 【问题描述】:

我的 vue 组件上传文件图片如下:

<template>
    <section>
        <ul class="media-list">
            ...
        </ul>
    </section>
</template>

<script>
    export default 
        ...
        props: ['productId'],
        methods: 
            ...
            onFileChange(e, index) 
                let files = e.target.files,
                let formData = new FormData()
                formData.append('file', files[0])
                axios.post(window.App.baseUrl+'/admin/product/upload-image',
                formData,
                
                    headers: 
                        'Content-Type': 'multipart/form-data'
                    
                
                ).then(function()
                    console.log('SUCCESS!!')
                )
                .catch(function()
                    console.log('FAILURE!!')
                );
            
        
    
</script>

所以如果用户上传文件图片会调用onFileChange方法

我的路线是这样的:

Route::prefix('admin')->group(function()
    Route::prefix('product')->group(function()
        Route::post('upload-image', 'Admin\ProductController@uploadImage')->name('admin.product.upload-image');
    );
);

我的控制器是这样的:

public function uploadImage(Request $request)

    echo '<pre>';print_r($request->all());echo '</pre>';die();

代码有效。我成功将文件上传到控制器中

但在这里我也想传递另一个参数。我要传递参数productId

我尝试像这样更改代码 axios:

...
axios.post(window.App.baseUrl+'/admin/product/upload-image',
product_id: this.productId, formData
...

它不起作用。结果为空

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

将 product_id 放入 formData。

let formData = new FormData();
formData.append('file', files[0]);
formData.append('product_id', this.productId);

axios.post(window.App.baseUrl+'/admin/product/upload-image', formData)
  .then(function()
    console.log('SUCCESS!!')
  )
  .catch(function()
    console.log('FAILURE!!')
  );

【讨论】:

以上是关于如何在 vue 组件上使用 axios 传递上传的文件和传递参数?的主要内容,如果未能解决你的问题,请参考以下文章

Axios Vue.js 将对象数组从 store.js 传递给组件

vue中element-ui 使用axios上传文件 组件

vue中element-ui 使用axios上传文件 组件

vue中element-ui 使用axios上传文件 组件

vue中element-ui 使用axios上传文件 组件

Axios 响应数据未加载到 Laravel 中的 Vue 组件上