uni-app微信小程序保存页面到相册;canvas保存小程序页面;微信小程序保存二维码活动页面到相册;微信小程序canvas 生成海报保存到相册;canvas绘制小程序页面保存及分享;

文末代码可以直接复制运行(只需要将中间的二维码图片、底部的微信和相册图片和微信头像配置白名单 改成你项目内的img图片即可成功运行)

一、场景:在微信小程序 个人名片页面 含有微信头像和个人信息二维码(识别可跳转小程序指定页面并携带参数),要求点击 保存到相册 按钮,将此页面上半部分进行截图保存;还有分享功能,和识别二维码一样,文末代码逻辑也有;

个人名片页面:
在这里插入图片描述
保存到相册页面:
在这里插入图片描述

二、需求分析:
–2.1:二维码:生成动态二维码图片及携带参数跳转指定小程序页面(点此查看),这些功能和二维码图片都是后端实现的。前端只调用接口拿图即可;
–2.2:实现小程序保存图片到系统相册(点此查看),需要有相应权限和图片域名白名单配置;
–2.3:前端如何将对应页面部分保存成图片?使用canvas画布生成图片(最稳定但也是麻烦的方式)!只需要将UI设计稿的内容,按照对应的比例画到画布上,最后使用画布生成图片;
.
总体思路就是:通过后端接口拿到二维码图片–正常写一个 个人名片页面(同时需要用canvas绘制出一个 个人名片页面,且这个canvas画布绘制的页面图片需要隐藏掉,而不是清除掉)–最后点击 保存到相册 按钮时候调用微信或者uni-app的保存图片方法即可;
.
–注意上述的两个点击查看链接一定要看下,避免很多坑!

三、针对可能遇到的问题和文末代码的部分解释:
3.1代码内图片替换: 页面最底部 分享到微信~@/static/icon-weixin.png和保存到相册~@/static/icon-pics.png两张图片需要替换成你自己的static静态图片;
二维码图片imgUrl: '../static/iconimg/codeimg.png',也要替换成后端接口给你的真实二维码图片;
3.2头像替换:uni.getStorageSync('avatarUrl')是你自己存的微信头像,需要配置download域名白名单,否则报错getImageInfo:fail download image fail. reason: downloadFile:fail createDownloadTask:fail url not in domain list;导致的下载失败;
–3.3canvas画布,需要存在,但是要隐藏在页面中;画布只能绘制本地图片和临时路径图片,不能绘制网络图片(所以我们需要用uni.getImageInfo()获取微信头像的网络图片,然后把这个绘制到画布上);
3.4画布的内容绘制方法,都是有大小和颜色和定位位置的:使用画布绘制同样的UI 页面时候,需要计算比例:计算UI设计稿和你手机的屏幕宽度比例(例如UI设计稿是750宽度 你手机是350宽度 比例就是2;那么你画布画图时候 所有的尺寸大小、宽高、位置、定位左右上下都需要除以 / 比例2;此时假如UI设计稿上的二维码图片宽高是340,图片距离UI设计稿顶部是400,距离最左边是60,那么你的画布上设置都是直接 340/2 , 400/2 , 60/2 )
–另附上画布canvas使用方法
–3.5如果你想直接看到画布绘制图片结果:可以打开代码524行的三行注释 点击一下 保存到相册 按钮就会看到绘制的图片 可能小程序模拟器上有误差 真机基本没误差
–3.6onShareAppMessage是分享功能,配合<button class="share_btn" open-type="share"></button>实现分享;

四、以下代码可以直接复制使用运行(注意上述的3.1和3.2替换图片以及配置微信头像的白名单)
无论真机还是模拟器都可以正常保存页面图片到相册
文中的2.1和2.2最好看一下

<template><view class="percard"><view class="top_card_box"><view class="top_info"><img class="t1" :src="myObj.head_image" alt=""><view class="t2"><view class="t3"><uni-icons class="icons_btn" type="arrowright" size="22" color="#ccc" /><view>{{myObj.nickname}}</view><view>{{myObj.personal_signature?myObj.personal_signature:'未设置个性签名'}}</view></view></view></view><view class="bot_info"><img class="erweima_img" :src="imgUrl" alt=""><view class="t5">用微信扫描二维码</view><view class="t6">加入保客多多,加入我的团队</view></view></view><canvas canvas-id="myCanvas" :style="{ width: canvasWidth, height: canvasHeight }" v-if="true"></canvas><view class="bot_card_box"><view class="fl"><img @click="aa" src="~@/static/icon-weixin.png" alt=""><view @click="aa">分享到微信</view><button class="share_btn" open-type="share"></button></view><view class="fl"><img @click="myimg" src="~@/static/icon-pics.png" alt=""><view @click="myimg">保存到相册</view></view></view></view>
</template><script>// var base64src = require('./base64.js')
// 导入外部JS库
export default {data () {return {myObj: {nickname: '喜喜', //微信昵称head_image: uni.getStorageSync('avatarUrl'),// 获取缓存内的微信头像--并且需要在你自己的小程序后台配置download域名白名单--否则会获取失败personal_signature: '个人名片二维码,携带个人的唯一标识参数id;他人识别此二维码,可以跳转至首页,并拿到此id', //个性签名user_code: "rjfhkb", //用户码---自定义二维码传递的动态参数},imgHeadNow: '',//微信头像网络图片下载本地的临时图片--画布只能绘制本地图片不能是网络图片imgUrl: '../static/iconimg/codeimg.png',//二维码图片(在这里我是直接引用了本地二维码图片  正常逻辑是后端返回二维码图片 getCodeImg方法就是)canvasWidth: '',//画布宽度canvasHeight: '',//画布高度ratio: 0,//计算UI设计稿和你手机的屏幕宽度比例(例如UI设计稿是750宽度 你手机是350宽度 比例就是2  那么你画布画图时候 所有的尺寸大小、宽高、位置、定位左右上下都需要除以 / 比例2 )}},// 分享函数onShareAppMessage (res) {if (res.from === 'button') {// 来自页面内分享按钮console.log(res.target)}return {title: '诚邀您使用保客多多,开启客户管理轻松之旅!',path: `pages/tabBar/home/index?user_code=${this.myObj.user_code}`// 分享跳转页面和二维码跳转携带参数页面是一样传参和逻辑(也都会打开跳转页的onLoad函数 接收参数)}},onLoad () {let that = thisuni.getSystemInfo({success: res => {// console.log(res)that.canvasWidth = res.screenWidth + 'px'that.ratio = 750 / res.screenWidththat.canvasHeight = 1000 / that.ratio + 'px'}})this.getCodeImg()},methods: {// 通过后端获取二维码图片getCodeImg () {// let user_code = this.myObj.user_code// let home_url = `/pages/tabBar/home/index?user_code=${user_code}`// let redirect_url = encodeURI(home_url)// getMinQrcode({ redirect_url: redirect_url }).then(res => {//   uni.showLoading({//     title: '加载中...',//     mask: true//   })//   // 解码后端返回的base64二维码图片//   var shareQrImg = `data:image/jpg;base64,` + res.data.base64//   base64src(shareQrImg, resCurrent => {//     this.imgUrl = resCurrent//     uni.hideLoading()//   })// })},// 绘制圆角矩形/**** @param {*} x 起始x坐标* @param {*} y 起始y坐标* @param {*} width 矩形宽度* @param {*} height 矩形高度* @param {*} r 矩形圆角* @param {*} bgcolor 矩形填充颜色* @param {*} lineColor 矩形边框颜色*/rectangle (ctx, x, y, width, height, r, bgcolor, lineColor) {ctx.beginPath()ctx.moveTo(x + r, y)ctx.lineTo(x + width - r, y)ctx.arc(x + width - r, y + r, r, Math.PI * 1.5, Math.PI * 2)ctx.lineTo(x + width, y + height - r)ctx.arc(x + width - r, y + height - r, r, 0, Math.PI * 0.5)ctx.lineTo(x + r, y + height)ctx.arc(x + r, y + height - r, r, Math.PI * 0.5, Math.PI)ctx.lineTo(x, y + r)ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5)ctx.fillStyle = bgcolorctx.strokeStyle = lineColorctx.fill()ctx.stroke()ctx.closePath()},// 使用画布绘制页面drawPageImg () {let _this = this// 生成画布const ctx = uni.createCanvasContext('myCanvas')// 获取微信头像的临时地址let headImg = this.imgHeadNow || '../static/kdd.jpg'// 绘制矩形this.rectangle(ctx, (55 / _this.ratio), (50 / _this.ratio), (640 / _this.ratio), (860 / _this.ratio), (8 / _this.ratio), '#fff', "#e4e4e4")// 绘制直线ctx.beginPath()  //开始绘制ctx.moveTo((55 / _this.ratio), (264 / _this.ratio))      //起点ctx.lineTo((695 / _this.ratio), (264 / _this.ratio))    //终点ctx.lineWidth = 1 // 设置线的宽度,单位是像素ctx.strokeStyle = '#e4e4e4'  //设置线的颜色ctx.stroke() //进行绘制// 绘制头像ctx.save() // 先保存状态 已便于画完圆再用ctx.beginPath() //开始绘制//先画个圆ctx.arc((130 / _this.ratio), (157 / _this.ratio), (45 / _this.ratio), 0, Math.PI * 2, false)ctx.clip()//画了圆 再剪切  原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内ctx.drawImage(headImg, (85 / _this.ratio), (112 / _this.ratio), (90 / _this.ratio), (90 / _this.ratio), (85 / _this.ratio), (112 / _this.ratio))//描绘图片 // 第一个参数是图片 第二、三是图片在画布位置 第四、五是将图片绘制成多大宽高(不写四五就是原图宽高)ctx.restore() //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 可以继续绘制// 绘制微信名称ctx.font = (32 / _this.ratio) + "px"ctx.fillStyle = '#212121'ctx.fillText(_this.myObj.nickname, (205 / _this.ratio), (110 / _this.ratio))//描绘文本// 绘制个性签名以及个性签名自动换行var temp = ""var row = []let gxqm = ''if (this.myObj.personal_signature) {gxqm = this.myObj.personal_signature} else {gxqm = '未设置个性签名'}let gexingqianming = gxqm.split("")let x = 205 / _this.ratiolet y = 110 / _this.ratiolet w = 320 / _this.ratiofor (var a = 0; a < gexingqianming.length; a++) {if (ctx.measureText(temp).width < w) {;} else {row.push(temp)temp = ""}temp += gexingqianming[a]}row.push(temp)ctx.font = (24 / _this.ratio) + "px"ctx.fillStyle = "#9E9E9E"for (var b = 0; b < row.length; b++) {ctx.fillText(row[b], x, y + (b + 1) * 20)}// 把二维码图片绘制到画布中ctx.drawImage(_this.imgUrl, (205 / _this.ratio), (375 / _this.ratio), (340 / _this.ratio), (360 / _this.ratio), (190 / _this.ratio), (375 / _this.ratio))//描绘图片// 绘制文字ctx.font = (26 / _this.ratio) + "px PingFangSC-Light"ctx.fillStyle = "#212121"ctx.textAlign = 'center'ctx.fillText('用微信扫描二维码', (375 / _this.ratio), (750 / _this.ratio))//描绘文本// 绘制文字ctx.font = (28 / _this.ratio) + "px PingFangSC-Regular"ctx.fillStyle = "#212121"ctx.textAlign = 'center'ctx.fillText('加入保客多多,加入我的团队', (375 / _this.ratio), (788 / _this.ratio))//描绘文本// 渲染画布ctx.draw(false, (() => {setTimeout(() => {uni.canvasToTempFilePath({canvasId: 'myCanvas',destWidth: _this.cropW * 2,   //展示图片尺寸=画布尺寸1*像素比2destHeight: _this.cropH * 2,quality: 1,fileType: 'jpg',success: (res1) => {uni.hideLoading()console.log('通过画布绘制出的图片--保存的就是这个图', res1.tempFilePath)// 真正的保存图片画布绘制的图片到相册uni.saveImageToPhotosAlbum({filePath: res1.tempFilePath,success: function () {uni.showToast({icon: 'none',position: 'bottom',title: "已保存到系统相册",})},fail: function (error) {uni.showModal({title: '提示',content: '若点击不授权,将无法使用保存图片功能',cancelText: '不授权',cancelColor: '#999',confirmText: '授权',confirmColor: '#f94218',success (res4) {console.log(res4)if (res4.confirm) {// 选择弹框内授权uni.openSetting({success (res4) {console.log(res4.authSetting)}})} else if (res4.cancel) {// 选择弹框内 不授权console.log('用户点击不授权')}}})}})},fail: function (error) {uni.hideLoading()console.log(error)uni.showToast({icon: 'none',position: 'bottom',title: "绘制图片失败", // res.tempFilePath})}}, _this)}, 500)})())},myimg () {// 头像网络图片下载本地的临时图片--画布只能绘制本地图片不能是网络图片uni.getImageInfo({src: this.myObj.head_image,success: (res) => {console.log('微信头像的临时路径', res.path)this.imgHeadNow = res.pathlet that = this// 获取用户是否开启 授权保存图片。uni.getSetting({success (res) {console.log(res)// 如果没有授权if (!res.authSetting['scope.writePhotosAlbum']) {// 则拉起授权窗口uni.authorize({scope: 'scope.writePhotosAlbum',success () {uni.showLoading({title: '加载中...',mask: true})//点击允许后--就一直会进入成功授权的回调 就可以使用获取的方法了that.drawPageImg()},fail (error) {//点击了拒绝授权后--就一直会进入失败回调函数--此时就可以在这里重新拉起授权窗口console.log('点击了拒绝授权', error)uni.showModal({title: '提示',content: '若点击不授权,将无法使用保存图片功能',cancelText: '不授权',cancelColor: '#999',confirmText: '授权',confirmColor: '#f94218',success (res) {console.log(res)if (res.confirm) {// 选择弹框内授权uni.openSetting({success (res) {console.log(res.authSetting)}})} else if (res.cancel) {// 选择弹框内 不授权console.log('用户点击不授权')}}})}})} else {uni.showLoading({title: '加载中...',mask: true})// 有权限则直接获取that.drawPageImg()}},fail: (error) => {console.log('获取用户是否开启保存图片 接口失败', error)uni.hideLoading()uni.showToast({title: error.errMsg,icon: 'none',})}})},fail: (error) => {console.log('临时图片获取失败', error)uni.hideLoading()uni.showToast({title: error.errMsg,icon: 'none',})}})}}
}
</script><style lang="less" scope>
.percard {overflow-x: hidden; //解决因为画布浮动超出导致的滚动条--需要隐藏掉height: calc(100vh - 90rpx);padding: 50rpx 55rpx;background-color: rgba(245, 247, 250, 1);// 加这两行代码是为了固定定位 解决此页面上下可滑动回弹问题position: fixed;width: calc(100vw - 110rpx);.top_card_box {border: 1px solid #e4e4e4;border-radius: 8rpx;background-color: #fff;.top_info {// height: 214rpx;display: flex;padding: 30rpx 72rpx 30rpx 30rpx;box-sizing: border-box;position: relative;.t1 {display: inline-block;width: 90rpx;height: 90rpx;position: absolute;top: 50%;transform: translate(0, -50%);border-radius: 50%;// margin-top: 37rpx;}.t2 {margin-left: 120rpx;flex: 1;// background-color: #1fff;// padding-right: 50rpx;display: inline-block;.t3 {flex: 1;view {font-family: PingFangSC-Medium;font-size: 32rpx;color: #212121;letter-spacing: 0;}view:last-child {margin-top: 20rpx;font-family: PingFangSC-Regular;font-size: 22rpx;color: #9e9e9e;}}.icons_btn {width: 40rpx;position: absolute;top: 50%;right: 30rpx;transform: translate(0, -50%);border-radius: 50%;}}}.bot_info {border-top: 1px solid #e4e4e4;height: 644rpx;// background-color: #1fff;text-align: center;.erweima_img {margin-top: 90rpx;display: block;width: 340rpx;height: 360rpx;// margin-left: 165rpx;margin-left: 150rpx;}.t5 {font-family: PingFangSC-Light;font-size: 26rpx;color: #212121;text-align: center;margin-top: 30rpx;}.t6 {font-family: PingFangSC-Regular;font-size: 28rpx;color: #212121;letter-spacing: 0;text-align: center;margin-top: 16rpx;}}}.bot_card_box {position: fixed;bottom: 31rpx;overflow: hidden;.fl {float: left;text-align: center;width: 335rpx;.share_btn {width: 120rpx;height: 165rpx;position: absolute;top: 0;left: 111rpx;background-color: rgba(255, 255, 255, 0);}button {border: none;}button::after {border: none;}img {margin-left: 111rpx;display: block;width: 112rpx;height: 112rpx;}view {margin-top: 22rpx;font-family: PingFangSC-Regular;font-size: 26rpx;color: #212121;letter-spacing: 0;text-align: center;}}}
}
</style>
<style>
canvas {float: left;margin-left: 1155rpx;margin-top: -911rpx;/* 打开以下注释 点击一下 保存到相册 按钮就会看到绘制的图片 可能小程序模拟器上有误差 真机基本没误差 *//* background-color: rgb(117, 250, 250);margin-left: -55rpx;margin-top: 0rpx; */
}
</style>

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

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

相关文章

面试经验谈架构

##################################################### #本文内容来自《老男孩linux运维实战培训》学生—郑东旭 #如有转载&#xff0c;请务必保留本文链接及本版权信息。 #欢迎广大运维同仁一起交流linux/unix网站运维技术! #QQ:919953500#E-mail:weilandeshanhuhai126.com …

微信小程序uni.switchTab传参获取不到;小程序跳转到tabBar页并传参;uni-app微信小程序获取tabBar页面参数失败;uni-app微信小程序tabBar页面onLoad不执行

需求场景&#xff1a;从非tabBar页面B跳转到tabBar页面A&#xff0c;并想要携带参数。 如果使用uni.switchTab传参&#xff0c;会导致tabBAE页面获取不到参数&#xff1b; 原因&#xff1a; 官方文档有说&#xff0c;uni.switchTab路径后不能带参数&#xff1b; uni.navigateT…

UIView的旋转iOS开发

更多阅读请访问http://www.hopean.com 有关UIView坐标变换的&#xff0c;但是经常不能得到自己想要的效果&#xff0c;今天就把它仔细研究了下。记下来等以后忘记的时候再复习 重写shouldAutorateToInterfaceOrientation:&#xff0c;限制某个方向会改变原点的位置&#xff0c;…

uni-app微信小程序uni.navigateTo跳转无效问题;记录一次uni-app页面跳转无效,来回跳转问题;wx.navigateTo ,跳转超过10次怎么点不动的解决办法。

场景需求&#xff1a;从小程序A页面跳转到小程序B页面&#xff0c;然后B页面还可以跳到A页面。 跳转失效原因&#xff1a; –1.uni.navigateTo只能跳转到非tabBar页面&#xff0c;tabBar导航栏页面只能用uni.switchTab方法跳转&#xff1b; –2.uni.navigateTo跳转的页面栈太多…

20160512关于mac安装caffe的记录

记得2015年在mac系统上安装过一次caffe&#xff0c;非常顺利&#xff0c;但是最近群里许多同学反映mac安装caffe出现了各种问题&#xff0c;同时我也在帮助别人安装caffe的时候也遇到了一些坑&#xff0c;不再像以前这么顺利了。估计与操作系统&#xff0c;caffe升级有关。 今晚…

Python学习笔记(二)

2019独角兽企业重金招聘Python工程师标准>>> pickle #腌制 pickle.dump() #保存数据 pickle.load() #恢复数据 locals() # 返回当前作用域中的变量集合 with语句会自动处理所有已打开文件的关闭工作&#xff0c;类似C#中的using() >>> data[5,78,3,45,7,1]…

mac:在当前文件夹打开terminal终端

From: http://www.cnblogs.com/yjmyzz/p/3662507.html System Preferences -> Keyboard -> Shortcuts -> Services -> New Terminal at Folders/New Terminal Tab at Folder 这二项都勾上 然后在Finder中,在任何目录上右击->service就能看到进入terminal的选项

自定义控件(视图)2期笔记13:View的滑动冲突之 内部拦截法

1. 内部拦截法&#xff1a; 父容器不拦截事件&#xff0c;所有的事件全部都传递给子元素&#xff0c;如果子元素需要此事件就直接消耗掉&#xff0c;否则就交给父容器进行处理。 这种方法和Android中的事件分发机制不一样&#xff0c;需要配合requestDisallowInterceptTouchEve…

微信小程序图片加载太慢;uni-app微信小程序加载图片优化;微信小程序图片image加载成功事件@load;图片加载成功触发@load事件

场景&#xff1a; 微信小程序&#xff0c;对于以下较大的图片&#xff08;例如几M&#xff09;&#xff0c;在真机运行时候加载比较慢&#xff0c;此时会有一个比较长时间的白屏&#xff0c;体验很差。 解决方案&#xff1a;图片未加载成功前&#xff0c;进行loading…;图片加载…

循环队列及C语言实现一

循环队列是为了充分利用内存&#xff0c;进行数据操作的一种基本算法。具体实现方式可划分为&#xff1a;链式队列和静态队列&#xff0c;这里所谓的静态是指在一片连续的内存区域进行数据操作。本文只讲述静态队列&#xff0c;也是最简单的实现方式&#xff0c;链式队列以及链…

微信小程序自定义导航栏;uni-app微信小程序自定义顶部导航栏;微信小程序顶部导航栏高度;微信小程序左上角胶囊按钮;uni-app微信小程序左上角胶囊设置

本文是自定义微信小程序的顶部导航栏&#xff1b;自定义微信小程序底部导航栏tabBar看另外这篇 文末的两个文件代码可以直接复制使用 自定义导航栏页图 一、场景&#xff1a; 有些时候&#xff0c;微信小程序需要我们在导航栏做更多的操作样式&#xff08;例如高度、颜色、加…

HTML5与HTML4的比较

HHTML5封装一些标签和属性&#xff0c;方便了开发。 1 <form> 2 <p> 3 <label>Username:<input name"search" type"text" id"search" autofocus></label> 4 </p> 5 &l…

[iOS]Unable to run app in Simulator

From: http://blog.csdn.net/snowwind/article/details/41099575 今天在试Admob的时候&#xff0c;发现在simulator上&#xff0c;程序突然不能运行了&#xff0c; 提示 [plain] view plaincopy Unable to run app in Simulator An error was encountered while running (…

uni-app微信小程序动态样式设置;微信小程序style行内式无效;微信小程序style行内式编译报错;微信小程序:style设置样式

场景&#xff1a;微信小程序设置动态样式&#xff0c;有些时候是需要用到变量来书写的&#xff1b;但是实际使用发现&#xff0c;行内式书写虽然有效&#xff0c;但是会使得微信小程序的编辑失败&#xff1b;故需要使用动态的v-bind来写动态变量行内式样式&#xff08;既使用:s…

循环队列及C语言实现二

在我的上一篇博文中已经讲到循环队列的特点作用以及C语言实现&#xff0c;当然实现和操作的方式比较简单&#xff0c;在实际项目应用中略显粗糙。因此&#xff0c;这一篇提供一个进阶篇的实现与操作接口。具体函数作用可以参见我的注释部分&#xff0c;使用的时候直接把里面的接…

MAC下secureCRT无法保存密码的解决方法

From: http://www.php230.com/securecrt-for-mac-store-password.html 在mac下新安装了secureCRT&#xff0c;取代系统自带的终端工具&#xff0c;主要是为了方便链接服务器。 mac下面的secureCRT默认保存不上密码&#xff0c;我们选择了保存密码后&#xff0c;下次登录还是提…

微信小程序下拉刷新列表onPullDownRefresh;微信小程序上划加载列表onReachBottom;uni-app微信小程序下拉加载数据;uni-app微信小程序上划页面加载数据

需求&#xff1a;微信小程序列表加载有两种方式&#xff0c;分别是按住页面下拉加载数据数据&#xff08;触发onPullDownRefresh&#xff09;和直接上划滚动页面到底部加载数据&#xff08;触发onReachBottom函数&#xff09;。 本文主要是使用上划滚动页面触底加载数据&#x…

ARP协议在同网段及跨网段下的工作原理

一、ARP在同个网段下的工作原理 首先&#xff0c;每台主机都会在自己的ARP缓冲区中建立一个 ARP列表&#xff0c;以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时&#xff0c;会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址&#xff0…

如何查看服务器当前的负载信息

From: http://blog.csdn.net/mal327/article/details/7423750 如何查看服务器当前的负载信息http://www.flybaaa.com/help/69_1.html网吧内突然很卡&#xff0c;这个情况我相信大家都有遇见过&#xff0c;但是通过什么方法来排查是否linux服务器的负载过大导致的这个问题呢&am…