【问题标题】:Vuejs post request to flask server, change url and return raw jsonVuejs 向烧瓶服务器发布请求,更改 url 并返回原始 json
【发布时间】:2020-10-22 01:03:18
【问题描述】:

我有一个用 Python 编写的服务器 Flask:

# configuration
DEBUG = True
UPLOAD_FOLDER = './uploads/'

# instantiate the app
app = Flask(__name__)
app.config.from_object(__name__)

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER   

# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}})

#Upload
@app.route('/')
@app.route('/api/uploadFile',methods=['POST'])
def uploadFile():
    response_object = {'status': 'success'}
    response_object['message'] = 'Caricamento effettuato con successo'
    file = request.files['file']
    filename = secure_filename(file.filename)
    file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
    return jsonify(response_object)
    
# sanity check route
@app.route('/ping', methods=['GET'])
def ping_pong():
    return jsonify('pong')

if __name__ == '__main__':
    app.run()

我有一个用于上传文件的 Vuejs 组件:

<template>
  <div>
    <form action = "http://localhost:5000/api/uploadFile" method = "post" enctype="multipart/form-data">
      <input type="file" id="file_id" name="file" v-on:change="onFileChange"  value="Choose file" />
      <button class="btn btn-success" @click="upload">Upload</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  name: 'UploadFile',
  data() {
    return {
      file: null,
    };
  },
  methods: {
    created() {
      this.getBooks();
    },
    onFileChange(e) {
      const files = e.target.files || e.dataTransfer.files;
      if (!files.length) { return; }
      this.createFile(files[0]);
    },
    createFile(file) {
      const reader = new FileReader();
      const vm = this;
      reader.onload = (e) => {
        vm.file = e.target.result;
      };
      reader.readAsDataURL(file);
    },
    upload() {
      const path = 'http://localhost:5000/';
      const data = new FormData();
      data.append('file', document.getElementById('file').files[0]);
      axios.post('${path}/api/uploadFile', data).then(function (response) {
        console.log(response)
      });
    },
  },
};
</script>

一切正常(上传工作正常),但 axios.post 调用的响应没有出现在控制台中!浏览器告诉我这个:

对于显示问题的图像,请单击此处1

我该如何解决这种情况?非常感谢您的帮助

【问题讨论】:

    标签: javascript python vue.js flask axios


    【解决方案1】:

    在您的模板文件中输入有 id="file_id" 但在您调用的函数中

    data.append('file', document.getElementById('file').files[0]);
    

    更改为 document.getElementById('file_id').files[0])

    【讨论】:

    • 谢谢,但这不是问题,因为上传工作正常。是服务器发送给客户端的响应显示不好。我只想在控制台中打印结果,但浏览器将我重定向到 localhost:5000/api/uploadFile 并显示原始 json 响应
    • 现在一切都清楚了。您没有阻止上传。并在单击按钮上提交您的表单。您可以在模板中更改 @click.prevent="upload"
    • 嗯好的,我在上传按钮上添加这个指令?
    • 是的,您可以在文档vuejs.org/v2/guide/events.html中阅读有关事件的更多信息
    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 2021-12-30
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多