如何将上传的文件添加到Vue中已上传的文件列表中?

时间:2018-03-02 22:12:05

标签: file-upload vue.js vuejs2 axios

我目前有一个接受单个CSV文件的文件上传器。然后使用axios我将这样的文件发送到服务器,一切正常。我无法实现的是能够上传另一个CSV,该CSV将被添加到上传的CSV列表中。我不是在谈论一次上传各种文件,而是在不同的时间点上传不同的文件。

这是用于在.vue文件中选择CSV文件的方法。

 staticCampaignCSVSelected: function (file) {
  console.log('campaign-detail.vue#staticCampaignCSVSelected', file)
  let vc = this
  vc.selectedHeuristicId = -1
  Campaign.uploadStaticCSV(vc.campaign, file[0])
  .then(
    function (data) {
      alert('CSV cargado con exito')
    }
  )
  .catch(
    function (err, data) {
      console.log("campaign-detail#staticCampaignCSVSelected - catch", err.response)
      alert(err.response.data.error)
    }
  )
},

这是我在其他JS文件中发布到API的函数:

function uploadStaticCSV (campaign, csv) {
  console.log('Campaign#uploadStaticCSV', campaign, csv)


  //long list of assertions

  let formData = new FormData()
  formData.append('csv', csv)

  return axios.post(API.campaignUploadStaticCSV(campaign.id), formData)
}

这是我在endpoints.js文件中的函数:

campaignUploadStaticCSV: function (id) { return this.campaign(id) + '' + '/csv' },

我还没有找到一种方法将[file]数组作为参数正确传递给函数,这是我认为我需要以某种方式做到的。

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

据我所知,你需要一种方法将文件从浏览器界面传递给staticCampaignCSVSelected(file)方法。如果是这样,为什么不使用输入模型或简单事件或观察者。 E.g。

<input type="file" @input="staticCampaignCSVSelected($event.target.files[0])" />

但我也发现你的代码有误。您应该将.then()。catch()回调附加到axios.post()本身,而不是附加到Campaign.uploadStaticCSV()方法。

并且

return axios.post()

不会返回服务器响应。你必须在

中处理它
axios.post().then(response => {})

回调