当前位置: 首页 > news >正文

nginx代理本地服务请求,避免跨域;前端图片压缩并上传

痛点

有时用vscode进行一些测试 请求不同端口服务、或者其他服务接口时时,老是会报跨域,非常的烦

所有就想用 nginx 进行请求代理,来解决这个痛点

nginx

下载地址:nginx: download

下载到某一目录:

window下nginx相关命令

//检查 Nginx 配置文件语法是否正确
nginx -t//启动 Nginx 服务
start nginx//停止 Nginx 服务
nginx -s stop//快速关闭并启动 Nginx 服务,用于重新加载配置文件
nginx -s reopen

nginx相关配置

D:\ZDS\nginx\nginx-1.24.0\conf  目录下的nginx.conf


worker_processes  1;events {worker_connections  1024;
}http {sendfile        on;keepalive_timeout  65;server {listen       80;server_name 127.0.0.1;location /service/ {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $proxy_host;}location / {proxy_pass http://127.0.0.1:5501/documentEdit/3.html;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

配置说明:

nginx监听本地http://127.0.0.1/服务 80端口,如果用户访问这个服务端口,会默认代理到http://127.0.0.1:5501/documentEdit/3 .html   服务,也就是打开这个服务,然后在这个服务中,如果请求url中有 ’service‘ 这个字段,那么这个url请求 就会被代理到http://127.0.0.1:8080 接口服务

例如,在5501的服务中,用ajax请求url为:

http://127.0.0.1/service/h5/engin?type=3&projId=13025

那么经过代理就会成为:

http://localhost:8080/service/h5/engin?type=3&projId=13025

配置详情:

worker_processes 1;

这个指令设置了 Nginx 启动时用于处理请求的工作进程数量。在这里,设定为 1 个工作进程

events { ... }

这个块中配置了关于连接处理的一些参数,包括 worker_connections,它定义了每个工作进程可以同时处理的最大连接数

 http { ... }

这是 HTTP 服务器的主要配置块,包括全局的 HTTP 相关设置

endfile on;keepalive_timeout 65;

sendfile on; 开启了文件的高效传输模式,在支持 sendfile 的系统上,可以直接在磁盘和网络之间传输数据,而不需要在用户空间和内核空间之间来回拷贝。

keepalive_timeout 65; 设置了 keepalive 连接的超时时间,即客户端与服务器的长连接的超时时间

server { ... }

这是定义一个 HTTP 服务器的块,在这里配置了该服务器的监听地址、名称等信息

listen 80;server_name 127.0.0.1;

listen 80; 定义了服务器监听的端口号。

server_name 127.0.0.1; 指定了该服务器的域名或 IP 地址

location /service/ { ... }location / { ... }

location /service/ { ... } 定义了对应 URL 路径的请求转发规则,这里将以 "/service/" 开头的请求转发到本地的端口 8080。

location / { ... } 定义了根路径 "/" 的请求转发规则,将请求转发到本地的端口 5501,并指定了具体的页面 "/documentEdit/3.html"。

error_page 500 502 503 504 /50x.html;location = /50x.html { ... }

这里定义了当出现 500、502、503、504 错误时显示的错误页面,并指定了该错误页面的路径。


配置完之后运行 start nginx 命令,然后打开http://127.0.0.1/ ,看能不能成功加载页面出来,如果成功加载出来了,说明配置成功

nginx踩坑

要在 server_name 127.0.0.1 监听的服务中加载到我们需要请求代理的页面,也就是加载到vscode用Live Server运行起来的服务,这样才能进行代理

前端图片压缩并上传

前端进行图片压缩,然后添加到formData中,上传到后台服务

base64转Blob

// 数据 URL 转换为 Blob 对象function dataURLtoBlob(dataURL) {// 使用 atob 函数解码 base64 编码的部分,split(',')[1] 用于获取逗号后的部分,即去掉 data:image/jpeg;base64, 中前面描述图片类型的部分,只留下实际的 base64 编码数据var byteString = atob(dataURL.split(',')[1]);// 用于存储二进制数据var ab = new ArrayBuffer(byteString.length);// 创建了一个无符号 8 位整型数组,引用了上面创建的 ArrayBuffer,用于处理二进制数据var ia = new Uint8Array(ab);// 将 base64 编码转换成二进制数据for (var i = 0; i < byteString.length; i++) {ia[i] = byteString.charCodeAt(i);}// 使用 ArrayBuffer 创建了一个新的 Blob 对象,表示了转换后的图像数据,并指定了其类型为 image/jpegreturn new Blob([ab], { type: 'image/jpeg' });}

完整代码

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>图片上传和压缩</title>
</head><body><input type="file" id="uploadInput" accept="image/*"><canvas id="canvas"></canvas><button onclick="compressAndUpload()">压缩并上传</button><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="crossorigin="anonymous" referrerpolicy="no-referrer"></script><script>// 获取相关DOM元素var uploadInput = document.getElementById('uploadInput');var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');// 监听文件选择事件uploadInput.addEventListener('change', function () {var file = uploadInput.files[0]; // 获取用户选择的文件var reader = new FileReader();// 文件读取完成时触发reader.onload = function (event) {var img = new Image();img.onload = function () {// 将图片绘制到canvas上var width = img.width;var height = img.height;var ratio = 1;// 若图片宽度或高度超过500像素,则进行压缩if (width > 500 || height > 500) {if (width > height) {ratio = 500 / width;} else {ratio = 500 / height;}}canvas.width = width * ratio;canvas.height = height * ratio;ctx.drawImage(img, 0, 0, canvas.width, canvas.height);// 数据 URL 转换为 Blob 对象function dataURLtoBlob(dataURL) {// 使用 atob 函数解码 base64 编码的部分,split(',')[1] 用于获取逗号后的部分,即去掉 data:image/jpeg;base64, 中前面描述图片类型的部分,只留下实际的 base64 编码数据var byteString = atob(dataURL.split(',')[1]);// 用于存储二进制数据var ab = new ArrayBuffer(byteString.length);// 创建了一个无符号 8 位整型数组,引用了上面创建的 ArrayBuffer,用于处理二进制数据var ia = new Uint8Array(ab);// 将 base64 编码转换成二进制数据for (var i = 0; i < byteString.length; i++) {ia[i] = byteString.charCodeAt(i);}// 使用 ArrayBuffer 创建了一个新的 Blob 对象,表示了转换后的图像数据,并指定了其类型为 image/jpegreturn new Blob([ab], { type: 'image/jpeg' });}// 输出压缩后的图片数据var compressedData = canvas.toDataURL('image/jpg', 1); // 压缩质量为0.7var formData = new FormData();var blob = dataURLtoBlob(compressedData);formData.append('image', blob, 'image.jpg');$.ajax({url: 'http://127.0.0.1:80/service/h5/engin?type=3&projId=13025',type: 'POST',data: formData,processData: false,contentType: false,success: function (response) {response = JSON.parse(response)},error: function (xhr, status, error) {console.error(error);}});}img.src = event.target.result;}reader.readAsDataURL(file); // 以DataURL格式读取文件});</script>
</body></html>

http://www.lryc.cn/news/236572.html

相关文章:

  • Vue3-readonly(深只读) 与 shallowReadonly(浅只读)
  • 中小企业怎么实现数字化转型?有什么实用的工单管理系统?
  • vue3.x中父组件添加自定义参数后,如何获取子组件$emit传递过来的参数
  • 【Machine Learning in R - Next Generation • mlr3】
  • CorelDraw2024(CDR)- 矢量图制作软件介绍
  • RT-DETR优化改进:轻量级Backbone改进 | VanillaNet极简神经网络模型 | 华为诺亚2023
  • 本地部署 EmotiVoice易魔声 多音色提示控制TTS
  • 5g路由器赋能园区无人配送车联网应用方案
  • ARTS 打卡第一周
  • 第八部分:JSP
  • Github小彩蛋显示自己的README,git 个人首页的 README,readme基本语法
  • dxva2+ffmpeg硬件解码(Windows)终结发布
  • C#密封类、偏类
  • C++菱形继承问题
  • 第20章 数据库编程
  • PS学习笔记——初识PS界面
  • JDBC,Java连接数据库
  • java智慧校园信息管理系统源码带微信小程序
  • 智能电销机器人好做吗?ai机器人有没有用?
  • 吴恩达《机器学习》9-1:代价函数
  • 代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
  • mybatisPlus的简单使用
  • vue+element实现多级表头加树结构
  • internet download manager2024中文绿色版(IDM下载器)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • markdown 公式编辑
  • 20231117在ubuntu20.04下使用ZIP命令压缩文件夹
  • IPKISS Tutorials 1------导入 pdk
  • 使用ChatGPT进行数据分析案例——贷款数据分析
  • 【数字图像处理】Gamma 变换