vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())

地址:https://www.cnblogs.com/muscles/p/9503103.html

一:首先说一下什么是跨域,跨域就是解决浏览器同源策略的问题。

那话又说回来了,什么是同源策略呢,(名词解释:同源策略(Same origin policy)是一种约定,它是浏览器最核心核心也最基本的安全功能,缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。)  简单来说同源策略就是为了保证用户信息安全,放着窃取数据从而禁止不同域之间的js 交互的。

那什么情况是不同域呢?

1.域名不同,

2.域名相同端口不同

3.协议不同

其上有一点不同为跨域。那么我们有时前后端分离又不得不对跨域进行处理

二:跨域解决方法主要包括

1.jsonp  2.CORS是跨源资源分享(Cross-Origin Resource Sharing)的缩写,现在对于这两种方法的使用文章一大摞,不多赘述

三:下面是我使用vue el-upload 上传文件遇到的跨域问题

作为一名php 程序员临时修改之前使用的项目,正好前端使用的vue ,从来没有使用过vue,当时vue对接的是ci框架写的接口,需要转移至tp5.1框架的接口。一个神奇的现象就是在Ci框架可以使用,在tp5.1框架的接口就涉及到跨域问题

这是我使用的上传方法,立即上传,就出现了下面的情况,而且后台也能接收到文件且size 也存在,但是你会发现当你进行下一步操作是都会报跨域问题,这种情况令我很是头疼,寻遍网络发现没有针对这个问题的解决方法,而且我在ci写的接口上没有类似的问题,如下图

主要看下面这张图,主要看请求类型,根本就不是上传文件的类型,我最后寻找了vue群里的一位大神,他看后跟我说你懂不懂啊,表单是没有跨域问题的,我把图截给他,还是这样的回答,而且说他也用el-upload 上传没有问题,好吧!!看来问题还是的自己解决。

后来我就给vue 加了个请求头 上传文件的头multipart/form-data 上传报边界丢失

后来想到了一个方法,form 上传是没有跨域问题的,那我就把他改变成form 上传,el-upload 的:before-upload=”beforeUpload” 上传前执行

在该方法里// console.log(file)//这里是重点,将文件转化为formdata数据上传

let fd = new FormData()

fd.append(‘file’, file)

this.$http.post(‘http://localhost/j030_picc_ceshi/public/weixin/index/upload_img’, fd).then((res) => {

}, (res) => {

console.log(res)

})

return false

在该方法里直接创建form 元素执行上传  下面return false 组织执行下面的操作,发现这样上传可以完美解决以上出现的问题

*********************重点在这里*************************

其实之所以出现以上的问题,使我忽略了跨域执行的逻辑导致的!!! 那么跨域又执行什么逻辑呢,众所周知跨域分为简单请求和复杂请求,到我们设置了请求头后,请求就变成复杂请求了,如下:复杂请求

axios({

headers:{

Accept:'application/json',

Authorization:k

}

})

那么复杂请求的时候,浏览器会首先发送了一个options请求,去验证服务器是否允许,然后在发送真正的请求,这是后台就需要设置支持的动作

header(‘Access-Control-Allow-Origin:*’);  //不推荐*

header(‘Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE’); //支持的http动作

header(‘Access-Control-Allow-Headers:x-requested-with,content-type’);  //响应头

而我出现的问题就是,没有做options 判断返回或过滤掉,而是直接接受获取,导致接受到的文件为空报错。

所以正确的做法应该是直接做options头判断,返回就可以了。

文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...相关推荐

  1. 传统form表单提交方式的文件上传与文件存储

    引言 时隔一天,上一篇文章<文件存储>刚一停笔,今天上午就解决了困扰我已久的文件上传问题. 站在一个已实现功能的角度来重新看待这个文件上传的业务:编辑页面选择jar包,然后通过form表单 ...

  2. form表单提交数据的同时上传文件代码示例

    form表单提交数据的同时在表单中上传文件代码示例 一.定义页面 注意:在form表单中加入属性 enctype="multipart/form-data"  表示此表单支持文件上 ...

  3. ajax 模拟表单提交,Ajax模拟Form表单提交,含多种数据上传

    ---恢复内容开始--- Ajax提交表单.使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取) 有时候前台的数据提交到后台,不想使用form表单上传,希 ...

  4. java ajax提交form表单提交_form表单AJAX提交(四种方法)

    一.AJAX的 form表单提交 1.第一种: 序列化提交$('#form').serialize() 前台: $.ajax({ url: "", type: "post ...

  5. 将form表单提交文件修改为ajax提交

    好久没有记录工作中的出现的问题了,不过最近客户提出了新的需求,正好弥补了一下我的短板,学到了新的知识. 周一接到客户电话,要求完善上周写的某个功能--就是同时上传多个图片,并通过接口程序传到第三方系统 ...

  6. 解决Form表单提交文件后台获取为null的情况

    项目想做一个上传文件的功能模块,但是发现后台获取文件始终为null,而且在form表单上也配置好了需要的action属性.method属性和enctype="multipart/form-d ...

  7. Vue 使用form表单提交问题

    背景:公司的项目对接了一家第三方的支付机构,使用云闪付web移动端支付,对方要求form表单提交信息 1.一开始,使用接口使用Axios请求设置form格式提交 import axios from & ...

  8. vue 添加完数据后刷新页面_vue form 表单提交后刷新页面的方法

    最近做的项目中,有增删改表格功能,在操作后需要实时更新页面数据.下面可以这样解决. 1.在methods中 定义好一个初始化渲染实例. 例如 lnitializationData(){//初始化页面数 ...

  9. jmeter测试接口--form表单提交请求(解决请求传参为空的问题)

    jmeter测试接口--form表单提交请求(解决请求传参为空的问题) 参考文章: (1)jmeter测试接口--form表单提交请求(解决请求传参为空的问题) (2)https://www.cnbl ...

最新文章

  1. c++控制台应用每一列数据如何对齐_Python数据分析第五节 pandas入门
  2. 数据库学习实践(四、五)--分页浏览、查询数据
  3. Mads Torgersen介绍C# 7及后续版本新特性
  4. IOS NSArray 倒序
  5. 管理软件公司与互联网公司的区别
  6. [EDA] 给出一个双进程状态机,请把它改为单进程状态机。
  7. $.extend()和(function($){….})(jQuery)
  8. Entity Framework表拆分
  9. 如何检查字符串“ StartsWith”是否为另一个字符串?
  10. c语言:编辑一个有趣的死循环程序并对其修改,仅仅是一个“=”号的差别
  11. 基于MVC .NET Core动态角色的授权
  12. Linux终端怎么打开root,在linux终端中执行root命令有哪些方法
  13. oracle卸载和服务问题
  14. JavaScript在线代码编辑器-技术选型
  15. instead of 触发器的用法
  16. python爬虫:批量下载qq空间里的照片(二)
  17. What Is 'FTW'? What Does It Mean?
  18. Apollo阿波罗配置中心基本概述
  19. Java笔记:面向对象3大特性
  20. Spark Streaming与流处理

热门文章

  1. 开关量光端机产品特点及应用范围介绍
  2. 【渝粤教育】国家开放大学2018年秋季 1320T关系营销 参考试题
  3. 【渝粤教育】国家开放大学2018年秋季 0727-21T思想道德修养与法律基础 参考试题
  4. 【渝粤教育】国家开放大学2018年春季 0221-21T数字电子电路 参考试题
  5. 【渝粤题库】陕西师范大学151204 中级财务会计作业(笔试题型)
  6. lock mysql unlock_MySQL中的lock tables和unlock tables
  7. Android 21mod,熊猫博士小镇合集 Mod
  8. linuxpip安装python包_Windows+Linux安装Python包管理工具pip
  9. php7 php5.6 array,[转]php5.6 升级到php7及变化
  10. php 之 ajax,PHP之AJAX