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

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框架的接口就涉及到跨域问题

20200716185206-5f10a1d6e941d.png

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

20200716185211-5f10a1db11980.jpg

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

20200716185214-5f10a1de21692.jpg

后来我就给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头判断,返回就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php private方法,php如何调用private方法

php调用private方法:首先定义一个parent类;然后在类的内部使用私有函数;接着实例化parent类,让其变成一个对象并赋值给“$obj”即可。将一个类实例化后就变成对象,私有函数只能在类内部使用,不能在类外&…

java flux api,SpringBoot学习系列-WebFlux REST API 全局异常处理

本文内容为什么要全局异常处理?WebFlux REST 全局异常处理实战小结摘录:只有不断培养好习惯,同时不断打破坏习惯,我们的行为举止才能够自始至终都是正确的。一、为什么要全局异常处理?前后端分离开发,一般提…

mvvm 后端_ZK实际应用:MVVM –与ZK客户端API一起使用

mvvm 后端在以前的文章中,我们已经使用ZK的MVVM实现了以下功能: 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是,我们不直接在controller(ViewModel&#xff0…

微信分享朋友圈固定缩略图 php,微信转发或分享朋友圈带缩略图、标题和描述的实现方法...

自己做博客以来,很早之前分享过文章至朋友圈,那个时候分享过去的文章自动获取页面的比例适合的图片为所缩略图:后期就很少分享至朋友圈, 近来分享文章给朋友后,发现不带缩略图和简介了,觉得这样很不好看&am…

java监控rabbitMq服务状态,SpringCloud-Turbine【RabbitMQ服务监控】

前面我们介绍了通过turbine直接聚合多个服务的监控信息,实现了服务的监控,但是这种方式有个不太好的地方就是turbine和服务的耦合性太强了,针对这个问题,我们可以将服务的监控消息发送到RabbitMQ中,然后turbine中Rabbi…

jpa 查询 列表_终极JPA查询和技巧列表–第1部分

jpa 查询 列表我们可以在Internet上找到一些JPA“如何做”,在本博客的此处,教您如何使用JPA执行多项任务。 通常,我看到有人问有关使用JPA进行查询的问题。 通常,为了回答此类问题,提供了几个链接以尝试找到该问题的解…

windows下php swoole扩展,Windows 下安装 swoole 图文教程(php)

Windows 下安装 swoole 具体步骤:Swoole,原本不支持在Windows下安装的,所以我们要安装Cygwin来使用。在安装Cygwin下遇到了很多坑,百度经验上的文档不是很全,所以我把自己安装Cygwin和Swoole写下来相当于对自己的沉淀吧。首先准备…

新CalendarFX视图:MonthGridView!

我和我的团队最近开始为CalendarFX创建新视图,其最初目标是在垂直列中显示整年。 该视图的名称是MonthGridView。 像往常一样,编码时目标略有变化。 该视图现在可以显示任意数量的月份,并且可以在前面或后面添加额外的月份。 现在&#xff0c…

php如何和c进行数据交换,PHP与 后台c交换数据 | 学步园

为什么要用json跟XML相比,JSON的优势在于格式简洁短小,特别是在处理大量复杂数据的时候,这个优势便显得非常突出。从各浏览器的支持来看,JSON解决了因不同浏览器对XML DOM解析方式不同而引起的问题。目前,JSON已经成为…

硒测试的干净架构

在这篇博客文章中,我想介绍一种具有最佳设计模式的Selenium测试的简洁架构:页面对象,页面元素(通常称为HTML包装器)和自行开发的非常小巧的框架。 该体系结构不限于示例中使用的Java,也可以以任何其他语言应…

ThinkPHP5 封装邮件发送服务(可发附件)

1、Composer 安装 phpmailer 1composer require phpmailer/phpmailer2、ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend/Mail.php 文件里,内容如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748…

密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

密码学笔记——eval(function(p,a,c,k,e,d) 的加密破解 例题: 小明某天在看js的时候,突然看到了这么一段代码,发现怎么也理不出代码逻辑,你能帮帮他吗? 格式:SimCTF{} eval(function(p,a,c,k,e,d){efunctio…

Windows负载机JVM 远程监控Linux服务器下tomcat

基本是跟着网上的操作进行的,除了遇到一个Local host name unknown的问题: 一、Linux服务器操作部分 服务器地址:10.64.111.68 首先配置JMX: 1.找到jdk目录 [rootC68 demo]# echo $JAVA_HOME /root/demo/jdk1.8.0_60 2. cd 到/roo…

二维码支付原理分析及安全性的探究

“二维码支付”安全么? 1 引言 随时支付宝和微信的线下不断推广,目前使用手机进行二维码支付已经逐渐成为一种时尚了。 但是大家有没有思考过:这种便捷的支付方式到底安不安全呢?今天我们就针对这个话题来进行一些探讨吧。 2 …

混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型(Mixtures of Gaussians)和EM算法 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation)。 与k-means一样,给定的训练样本是,我们…

wordpress archive.php,wordpress分类目录模板(archive.php)制作

本课程视频是VIP会员课程,学习请进入VIP学习区。分类目录模板通常包括二种,一种是普通文章列表目录,一种是产品图片展示列表目录。文章列表目录是通过将分类下的文章标题通过无序列表的形式展示出来。如下图。产品图片列表目录是将产品的第一…

linux c统计进程网络读写,linux网络分析、性能分析、文本格式化、文件读写操作之利器(mtr、top、jq、sponge)...

好的工具能够让我们工作更加高效,结合工作中的情况,今天分享下linux下比较好用的几个工具。网络分析工具mtrmtr是网络链路检测判断问题非常好用的工具,集成了tracert和ping这两个命令的功能,动态的输出检测结果。mtr 默认发送icmp…

C++入门经典-例2.13-左移运算

1&#xff1a;代码如下&#xff1a; // 2.13.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include<iostream> using namespace std; void main() {int a0x40,b;ba<<1;//左移1位cout << b << endl;//以十进制输出 } View Cod…

jwebsocket传图片_Java中带有JWebSocket的WebServerSocket

jwebsocket传图片首先&#xff0c;转到http://jwebsocket.org/下载2个软件包Server and Client。 如果要查看源代码&#xff0c;请下载源代码包。 服务器 解压缩服务器程序包。 转到“ conf”文件夹 选择“ jWebSocket.xml”文件打开 编辑“ jWebSocket.xml”文件&#xff…

linux xargs命令,xargs 命令教程

xargs是 Unix 系统的一个很有用的命令&#xff0c;但是常常被忽视&#xff0c;很多人不了解它的用法。本文介绍如何使用这个命令。一、标准输入与管道命令Unix 命令都带有参数&#xff0c;有些命令可以接受"标准输入"(stdin)作为参数。$ cat /etc/passwd | grep root…