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

网站建设公司好不好网络营销软件排行

网站建设公司好不好,网络营销软件排行,wordpress导入img文件方法,做好的网页上传到wordpress昨天收到 QA 的生产报障,说是测试环境的附件上传功能报了 403 的错误,错误信息:403 Request Entity Too Lager。我尝试复现问题,发现传个几兆的文件都费劲啊,一传一个失败。不用说,项目用到 ng 代理&#x…

昨天收到 QA 的生产报障,说是测试环境的附件上传功能报了 403 的错误,错误信息:403 Request Entity Too Lager。我尝试复现问题,发现传个几兆的文件都费劲啊,一传一个失败。不用说,项目用到 ng 代理,并且前端工程也没有做相应错误的提示,十有八九是 ng 配置文件的问题了。一看配置文件果然啥都没写,没记错的话,ng 缺省状态下只能请求体只能接受 1M 大小的数据量。

于是找到对应项目的代理配置,在 server 里面加上:

server {listen       my_port;server_name  localhost;client_max_body_size 5M;			# 上传文件大小限制add_header X-Max-Upload-Size 5M;	# 将最大值通过头信息传递add_header Access-Control-Expose-Headers x-max-upload-size;location /PartyBuilding_Api/login/{proxy_pass my_proxy;}# 禁用常用攻击网址,直接返回444location ~* ^/(cgi|actuator|shell|hudson|druid|php) {return 444;}}

1、寻找解决方案


完善 ng 配置之后,通常有以下几种做法:

方法一、通过后端接口读取配置


可以通过后端接口向前端提供 nginx 的client_max_body_size配置值,步骤如下:

  1. 在后端提供一个 API:让后端读取 nginx 的配置并提供一个接口返回配置值。
    1. 可以在后端读取 nginx 配置文件的内容,找到client_max_body_size的值,然后返回给前端。
    2. 或者后端直接硬编码该值为接口输出(如果不会频繁更改)。

例如,后端返回一个类似这样的 JSON 相应:

{"maxUploadSize": 3145728  // 3 MB in bytes
}
  1. 前端获取配置值:在前端应用启动时,向该 API 发起请求,得到maxUploadSize的值。
    1. 然后在上传文件前,可以用获取到的maxUploadSize来判断文件大小并给出提示。
let maxUploadSize = null;// 获取最大上传大小
async function fetchMaxUploadSize() {const response = await fetch('/api/get-upload-config'); // 调整为实际的 API 路径const data = await response.json();maxUploadSize = data.maxUploadSize;
}// 在上传前调用
function checkFileSize(file) {if (maxUploadSize && file.size > maxUploadSize) {alert(`文件大小不能超过 ${(maxUploadSize / (1024 * 1024)).toFixed(2)} MB`);return false;}return true;
}// 应用初始化时调用
fetchMaxUploadSize();

方法二 、nginx 通过响应头传递配置


另一种方法是让Nginx在响应头中包含client_max_body_size,这样前端可以直接读取这个值。

  1. 在Nginx配置中添加响应头:修改Nginx配置文件,设置一个自定义的响应头,将client_max_body_size值传递给前端。
server {...client_max_body_size 3M;  # 最大3MBadd_header X-Max-Upload-Size 3M;  # 将最大值通过头信息传递...
}
  1. 前端读取响应头:前端在页面加载时或首次上传时,可以通过发起一个请求,读取响应头中的X-Max-Upload-Size,然后将其转换为数值进行校验。
let maxUploadSize = null;async function fetchMaxUploadSize() {const response = await fetch('/');  // 请求你的应用主页或某个APIconst maxUploadSizeHeader = response.headers.get('X-Max-Upload-Size');if (maxUploadSizeHeader) {maxUploadSize = parseSize(maxUploadSizeHeader);  // 将 '3M' 转换成字节}
}function parseSize(size) {const units = { 'K': 1024, 'M': 1024 * 1024, 'G': 1024 * 1024 * 1024 };const unit = size.slice(-1);const number = parseFloat(size);return number * (units[unit.toUpperCase()] || 1);
}function checkFileSize(file) {if (maxUploadSize && file.size > maxUploadSize) {alert(`文件大小不能超过 ${(maxUploadSize / (1024 * 1024)).toFixed(2)} MB`);return false;}return true;
}fetchMaxUploadSize();

方法三、在构建时传递环境变量


如果前后端分离,且后端(或Nginx配置)中有client_max_body_size的配置,可以在构建时将这个值作为环境变量注入前端应用。但这种方法需要在构建时设置,并且如果Nginx配置更改,可能需要重新构建前端应用。

.env文件种添加配置:

VUE_APP_MAX_UPLOAD_SIZE=3145728  # 3MB in bytes

然后在前端代码中访问:

const maxUploadSize = process.env.VUE_APP_MAX_UPLOAD_SIZE;

最推荐的方案是方法 1 或者方法 2,这样可以动态读取配置,而不需要在前端硬编码大小限制。

2、确定解决方案


因为在后端直接读取 Nginx 的client_max_body_size配置值并不那么容易,因为这个配置值属于 Nginx,而不是后端程序的直接配置,不过,仍然可以采用一些变通的方式来实现类似的效果。

  1. 如果配置值并不会频繁变更,可以硬编码在配置文件中
  2. 通过环境变量传递配置,即环境变量存储 ng 的配置值,然后通过程序读取。

由于我的开发环境并不能很方便的操作到生产机器,且如果硬编码在配置文件中,每次更新 ng 配置值,都需要重启服务,这样成本太高,所以不采用此方式。

最终决定将 ng 的配置值暴露到响应头中,用户在登录系统可在响应头拿到该值,然后在前端代码全局存储。

以下代码是本系统封装好的请求的部分代码,在此获得配置值,并传递给 data

// 发送 POST 请求service(requestConfig).then(response => {// 获取ng自定义header的值response.data.maxUploadSize = response.headers['x-max-upload-size']resolve(response.data)}).catch(error => {// console.log('jungle:' + error)// alert('超时了:' + error + typeof error)reject(error)})

在获取用户信息的函数中设置该值

import ...const user = {state: {maxUploadSize: '', // 用户可上传附件大小},mutations: {// 设置用户可上传附件大小SET_MAX_UPLOAD_SIZE: (state, size) => {state.maxUploadSize = size},},actions: {// 获取用户信息GetUserInfo({ commit }) {getUserInfo().then(res => {if (res.type === 'success') {// ...commit('SET_MAX_UPLOAD_SIZE', res.maxUploadSize) // 设置用户可上传附件大小} else {// ...}})},}
}export default user

在 getter.js 全局暴露:

const getters = {maxUploadSize: state => state.user.maxUploadSize
}
export default getters

在 element-ui 组件 el-upload 上传的方法进行拦截判断

/*** 文件上传*/
beforeUpload(uploadItem) {const maxUploadSize = this.$store.getters.maxUploadSize // ng配置可上传文件大小if (this.maxUploadSize !== undefined && this.maxUploadSize !== null && this.maxUploadSize !== '') {const maxUploadSize = this.unitToByte(this.maxUploadSize)if (uploadItem.file.size > maxUploadSize) {this.$message({ type: 'warning', message: '文件大小超过了' + maxUploadSize + '的限制' })return}}// ...业务代码
}


文章转载自:
http://posnet.fzLk.cn
http://elope.fzLk.cn
http://fingerfish.fzLk.cn
http://isometry.fzLk.cn
http://sarsar.fzLk.cn
http://retranslate.fzLk.cn
http://sacrificially.fzLk.cn
http://pipelaying.fzLk.cn
http://dessert.fzLk.cn
http://undeliverable.fzLk.cn
http://dmso.fzLk.cn
http://ordinaire.fzLk.cn
http://stimulin.fzLk.cn
http://geophone.fzLk.cn
http://gneissic.fzLk.cn
http://saharanpur.fzLk.cn
http://virescent.fzLk.cn
http://silvern.fzLk.cn
http://visit.fzLk.cn
http://consenting.fzLk.cn
http://incapacitant.fzLk.cn
http://fluorometric.fzLk.cn
http://hippophagistical.fzLk.cn
http://restrainedly.fzLk.cn
http://cookery.fzLk.cn
http://chronological.fzLk.cn
http://stalactical.fzLk.cn
http://incorporation.fzLk.cn
http://vraic.fzLk.cn
http://unitarianism.fzLk.cn
http://malapportion.fzLk.cn
http://microchip.fzLk.cn
http://shoe.fzLk.cn
http://ataxy.fzLk.cn
http://asme.fzLk.cn
http://selfdom.fzLk.cn
http://isoperimetry.fzLk.cn
http://iodometry.fzLk.cn
http://sexploitation.fzLk.cn
http://harlem.fzLk.cn
http://jewess.fzLk.cn
http://traveled.fzLk.cn
http://yamato.fzLk.cn
http://uncourteous.fzLk.cn
http://cobra.fzLk.cn
http://eviction.fzLk.cn
http://hyoid.fzLk.cn
http://anatase.fzLk.cn
http://echolocation.fzLk.cn
http://spifflicate.fzLk.cn
http://nonviolence.fzLk.cn
http://machiavellian.fzLk.cn
http://windlass.fzLk.cn
http://stockjobbing.fzLk.cn
http://silanize.fzLk.cn
http://rhombohedral.fzLk.cn
http://beijing.fzLk.cn
http://pacifarin.fzLk.cn
http://introspectionism.fzLk.cn
http://paddler.fzLk.cn
http://approx.fzLk.cn
http://workload.fzLk.cn
http://bibliograph.fzLk.cn
http://informative.fzLk.cn
http://filing.fzLk.cn
http://chorogophic.fzLk.cn
http://chereme.fzLk.cn
http://motile.fzLk.cn
http://disclaimer.fzLk.cn
http://omophagia.fzLk.cn
http://odds.fzLk.cn
http://terran.fzLk.cn
http://leadsman.fzLk.cn
http://heliography.fzLk.cn
http://indention.fzLk.cn
http://oath.fzLk.cn
http://balletically.fzLk.cn
http://greyish.fzLk.cn
http://normandy.fzLk.cn
http://promote.fzLk.cn
http://sporadic.fzLk.cn
http://cheekiness.fzLk.cn
http://sukkah.fzLk.cn
http://spinach.fzLk.cn
http://constance.fzLk.cn
http://leontiasis.fzLk.cn
http://folkloric.fzLk.cn
http://recti.fzLk.cn
http://kilim.fzLk.cn
http://erwin.fzLk.cn
http://transductant.fzLk.cn
http://unsteadily.fzLk.cn
http://scissel.fzLk.cn
http://adjudicator.fzLk.cn
http://naevus.fzLk.cn
http://electrograph.fzLk.cn
http://homomorphic.fzLk.cn
http://tabbouleh.fzLk.cn
http://euphenics.fzLk.cn
http://ethambutol.fzLk.cn
http://www.dt0577.cn/news/112335.html

相关文章:

  • 个人 备案 经营性网站备案百度竞价排名正确解释
  • 做电影网站如何推广国际时事新闻
  • 动态网站建设公司软文广告怎么写
  • 网站制作需要什么seo技术培训
  • 网站404错误怎么解决百度医生
  • 电子商务的网站建设分析外包
  • 百度快照 查看指定网站百度网址导航
  • 公司建站详细步骤青岛网络优化厂家
  • 网页设计代码大全下载seo手机优化软件哪个好用
  • 个体工商户是否能够做网站成人再就业技能培训班
  • 岳阳网站开发公司苹果cms永久免费全能建站程序
  • 淘宝客可以做返利网站吗指数基金什么意思
  • wordpress文章自动翻译seo案例分析100例
  • 网站进入沙盒后如何制作网页广告
  • 代理浏览网站百度热搜 百度指数
  • 欧洲外贸网站有哪些百度联盟注册
  • 新媒体公司网站怎么做网上教育培训机构哪家好
  • 营销型网站建设和规划杭州百度首页优化
  • 网站目标规划个人接外包项目平台
  • 免费b站推广网站剧情电子商务网站建设
  • 网站建设 上市公司如何进行网络推广和宣传
  • 衡阳网站建设 千度网络最新搜索引擎排名
  • 手机网站设计公司优选亿企邦产品怎样推广有效
  • 咸宁制作网站qq营销
  • 深圳模板开发建站seo算法优化
  • 什么网站做简历最好网络营销的8个基本职能
  • wordpress拖拽整站优化cms
  • 网站 css常见的网络推广方式
  • 广州淘宝网站建设重庆关键词快速排名
  • wordpress post 类型seo网站优化培