【问题标题】:Vue vform File uploadVue vform 文件上传
【发布时间】:2019-01-11 12:57:26
【问题描述】:

我有在编辑和创建帖子之间切换的表单模式 我需要上传图片并提交表格。有一个示例仅上传图像字段。这里我需要提交带有其他表单字段的文件

<form @submit.prevent="editmode ? updatePost() : createPost()">
<div class="modal-body">
     <div class="form-group">
        <input v-model="form.title" id="title" type="text" name="title"
            placeholder="Title"
            class="form-control" :class="{ 'is-invalid': form.errors.has('title') }">
        <has-error :form="form" field="title"></has-error>
    </div>


     <div class="form-group">
        <input v-model="form.featured" id="featured" type="file" name="featured"
            placeholder="Featured Image" @change="selectFile"
            class="form-control" :class="{ 'is-invalid': form.errors.has('featured') }">
        <has-error :form="form" field="featured"></has-error>
    </div>
</div>
<div class="modal-footer">
    <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
    <button v-show="editmode" type="submit" class="btn btn-success">Update</button>
    <button v-show="!editmode" type="submit" class="btn btn-primary">Create</button>
</div>
</form>

这是我调用来上传图像文件的脚本。我正在使用 this.form.post('api/post') 发布数据。我需要如何在脚本中提交 multipart/form-data

     export default {
    data() {
    },
    methods: {
    selectFile(e) {
        const file = e.target.files[0];
        this.form.featured = file;
    },
       createPost(){
            this.$Progress.start();
            this.form.post('api/post')
            .then(()=>{

                $('#addNew').modal('hide')

                this.$Progress.finish();

            })
            .catch(()=>{

            })
        }

【问题讨论】:

  • 我也有同样的问题,我设法解决它如下。如果它有助于解决您的问题,请接受该解决方案。

标签: laravel vue.js


【解决方案1】:

使用vform upload example,您可以上传文件并继续传递其他字段。

您需要导入额外的库调用“objectToFormData.js”,才能将您的对象转换为 FormData。

这应该可行。

  1. 您将 objectToFormData.js 下载到本地文件 输入/resources/js/objectToFormData.js

  2. 在您的 app.js 文件中添加以下代码。

    从“./objectToFormData”导入objectToFormData; window.objectToFormData = objectToFormData;

  3. 如下修改你的代码,需要将 this.form.post 改为 this.form.submit 以添加transformRequest。

    export default {
        data() {
    },
    methods: {
    selectFile(e) {
        const file = e.target.files[0];
        this.form.featured = file;
    },
       createPost(){
            this.$Progress.start();
            this.form.submit('post','api/stock-import', {
    
                // Transform form data to FormData
                transformRequest: [function (data, headers) {
                    return objectToFormData(data)
                }]
            }).then(()=>{
    
                $('#addNew').modal('hide')
    
                this.$Progress.finish();
    
            })
            .catch(()=>{
    
            })
        }
    

【讨论】:

  • @MohammadUsman 我也被困在那里。我无法使用更新执行相同的操作。它仅适用于创建新表单。
  • 您想要插入和更新图像或其他类型的文件,如 pdf,我可以发布我的插入和更新图像的 pdf 我仍然是堆栈
猜你喜欢
  • 2021-05-14
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2018-03-13
  • 2018-08-26
  • 2019-07-21
  • 2021-05-13
  • 1970-01-01
相关资源
最近更新 更多