VUE使用el-upload做上传遇到跨域问题

跨域问题网上搜索很多,感觉情况都不一样,我这里说说我遇到得问题,记录下。

先说说上传吧,我使用element框架,刚开始以为简单得使用<el-upload>就行了,其实这个别人封装好的,但你上传的时候还需要一个接收用的服务,这个文件接收的服务是同事用C#写的,我就不过多阐述。

我所了解得跨域就是两个,要么后端修改,要么前端修改,我看都是需要修改的,改需要根据具体情况修改。

要了解什么是跨域百度下:跨域 No 'Access-Control-Allow-Origin' header is present on the requested resource._lily-0622的博客-CSDN博客

问题抛出

我们上传文件会报:No 'Access-Control-Allow-Origin' header is present on the requested resource.错误

网上教了很多方法解决跨域问题

1.谷歌浏览器安装 'Access-Control-Allow-Origin插件

2.电脑的2273端口打开,也就是入站规则添加这个

3.关闭防火墙

---等等

---以上一一尝试都不行,最好验证通过了发现与这些没有关系。

只有再nginx服务设置Access-Control-Allow-Origin *; 这个*就是任意的意思

为了测试效果,使用的是localhost,可以用ip地址试试

一、首先改服务端

首先文件接收的服务要加上允许配置的东西,也就是允许所有的请求,无论是post、get等,C#大概配置是:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET" />
        <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type" />
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>

    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

注意:---最好是自己写个C#的demo客户端模拟测试下这个接口是不是能正常使用,如果可以就接下来操作,否则都白干。

这里文件服务给出的文件接收端口为:http://localhost:2273/xxxx/

二、修改前端

再VUE的配置vue.config.js文件中添加跨域请求,


// 代理跨域请求 //xxxx是指文件接收的接口
        proxy: {
            "/xxxx": {
                // target: "http://localhost:8080/api",
                target: "http://127.0.0.1:2273/",
                changeOrigin: true,
                secure: false,
                pathRewrite: {
                    // "^/api": "./"
                    "^/xxxx": "/xxxx"
                }
            }
        }

文件全部的内容为:

const debug = process.env.NODE_ENV !== "production";

module.exports = {
    configureWebpack: (config) => {
        if (debug) {
            config.devtool = "source-map";
        }
    },
    publicPath: "/dist",
    lintOnSave: false,
    productionSourceMap: debug,
    runtimeCompiler: true,
    devServer: {
        // 默认会自动打开浏览器
        open: false,
        https: false,
        port: 8090, // 端口
        // 错误、警告在页面弹出
        overlay: {
            // warnings: true,
            errors: true
        },
        // 代理跨域请求
        proxy: {
            "/xxxx": {
                // target: "http://localhost:8080/api",
                target: "http://127.0.0.1:2273/",
                changeOrigin: true,
                secure: false,
                pathRewrite: {
                    // "^/api": "./"
                    "^/xxxx": "/xxxx"
                }
            }
        }
       

    },
}

任何我们使用element框架中的el-upload,小白在这里不需要做过多的改动(全部用官网的),只关注action路径,

这里action不要添加“http://localhost:2273/xxxx/”,因为在配置里已经添加了IP和端口。只按照下面写即可

 <el-upload
                        class="upload-demo"
                        drag
                        ref="upload"
                        
                        action=" xxxx"
                        multiple>
                        <i class="el-icon-upload"></i>
                        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                        <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
                      </el-upload>

也可以:

<el-upload
                        class="upload-demo"
                        drag
                        ref="upload"
                        action=" http://192.168.0.1:8080/xxxx/"
                        multiple>
                        <i class="el-icon-upload"></i>
                        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                        <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
                      </el-upload>

这里我们部署到nginx中,正式环境运行,发现报错

POST http://localhost:8091/dist/xxxx/ 404 (Not Found)

这里的http://localhost:8091/dist是我们直接浏览器输入访问web的地址,但是我们的接口地址(端口是2273),即:http://localhost:2273/Default.aspx/

因为我们用的:action=" Default.aspx",这个是相对路径,我们修改下:

action=" /Default.aspx/"

重新加载上传测试,发现又报错:唯一的区别就是没有了dist,就是端口不对。

POST http://localhost:8091/xxxx/ 404 (Not Found)

可我们正式环境部署是这个地址啊,这就需要我们修改服务部署环境---nginx反向,请看下面

三、修改服务部署(nginx反向)

因为我的前端部署是使用nginx服务(如果你用其他的就看看其他的),所有这个服务是需要部署,也就是nginx反向原理,再配置文件加上下面的即可

//xxxx是指文件接收的接口

location /xxxx {
           			
			add_header Access-Control-Allow-Origin *;
			proxy_pass http://localhost:2273/xxxx; 
        }

在测试的时候,修改后就要先杀掉进程,重新启动。

这里要说下,我们什么时候需要修改nginx服务反向呢?

例如我们打开浏览器输入web地址为:http://localhost:8080/dist

但是我们上传得时候,浏览器报错:http://localhost:8080/xxxx   ,这个就是还是用nginx服务得地址,端口号跟输入地址一样,而不是上传接口得地址:http://localhost:2273/xxxx

这时候就考虑nginx反向问题了。

如果是浏览器报错:http://localhost:8080/dist/xxxx ,这个就是再vue页面设置得路径不对;

注意:服务一定要先打开,别忘记哦!!!如果还不行,那肯定是文件接收服务没有写好,这个要自己确认下。

总结:重点是:1.前端得el-upload配合配置文件请求跨域设置,见二修改前端; 2.就是nginx反向的问题,见三修改nginx反向,直接复制。 如果都不行,90%得问题出在文件接收服务没有写好,为防止非同源原因导致,让写文件接收服务的自己写个demo测试下。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
Vue使用el-upload组件来上传图片的步骤如下: 1. 在Vue组件中引入el-upload组件,并添加相应的props和data属性。 2. 在模板中使用el-upload标签,并设置相应的属性,例如action属性指定图片上传的接口地址,list-type属性指定展示上传图片的样式等。 3. 在methods中定义handleAvatarSuccess方法作为上传成功的回调函数,通过该方法获取服务端返回的图片路径,并将其绑定到imageUrl属性上。 4. 在methods中定义beforeAvatarUpload方法作为上传前的验证方法,用于验证图片格式和大小是否符合要求。 5. 在methods中定义handleRemove方法作为删除图片的回调函数,通过该方法从imageList中移除对应的图片对象。 6. 在methods中定义handlePictureCardPreview方法作为图片预览的回调函数,通过该方法设置预览图片的相关属性。 7. 在模板中使用v-if和v-else指令来根据是否有图片路径来展示或隐藏图片。 以上就是使用el-upload组件在Vue上传图片的基本步骤。请根据实际情况进行相应的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue使用element-ui的el-upload上传图片至服务器,服务端使用的是node.js对接受的图片进行处理](https://blog.csdn.net/qq_49042268/article/details/122722395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue el-upload实现图片和文字上传](https://blog.csdn.net/weixin_47978760/article/details/128042608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试狂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值