关键词:
微信小程序图片上传功能包含:上传到七牛云、删除图片、查看图片
1.创建子组件tpupload
// wxml文件
<view style="padding: 10px;"> <!-- 图片上传 --> <view class="weui-uploader"> <view class="img-v weui-uploader__bd"> <view class=\'pic\' wx:for="imgs" wx:for-item="item" wx:key="*this"> <image class=\'weui-uploader__img \' src="item" data-index="index" mode="aspectFill" bindtap="previewImg"> <icon type=\'cancel\' class="delete-btn" data-index="index" catchtap="deleteImg"></icon> </image> </view> </view> </view> <!-- 用来提示用户上传图片 --> <view class="weui-uploader__input-box pic addimage" bindtap="uploadImages" wx:if="imgs.length <= 9"> <image src="/images/upload.png" style="width: 120rpx; height: 120rpx"></image> </view> </view>
//json文件
"component": true, "usingComponents":
// js文件
// components/tpupload/tpupload.js const app = getApp() Component( /** * 组件的属性列表 */ properties: uploadDesc:String, tpKey:String, tpNum:Number, imgs:Array, , /** * 组件的初始数据 */ data: imgs:[] , lifetimes: attached: function() , detached: function() // 在组件实例被从页面节点树移除时执行 , , pageLifetimes: show() , /** * 组件的方法列表 */ methods: // 删除图片 deleteImg(e) var imgs = this.data.imgs; var that = this; var index = e.currentTarget.dataset.index; imgs.splice(index, 1); that.setData( imgs: imgs ); that.triggerEvent(\'tpupload\', imgs:imgs ) , // 预览图片 previewImg(e) //获取当前图片的下标 var index = e.currentTarget.dataset.index; //所有图片 var imgs = this.data.imgs; wx.previewImage( //当前显示图片 current: imgs[index], //所有图片 urls: imgs ) , // 上传图片-多张 uploadImages() var that = this; var imgs = that.data.imgs; wx.chooseImage( // count: 1, // 默认9 sizeType: [\'original\', \'compressed\'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: [\'album\', \'camera\'], // 可以指定来源是相册还是相机,默认二者都有 success: function (res) // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片 var tempFilePaths = res.tempFilePaths; if(imgs.length + tempFilePaths.length > that.data.tpNum) wx.showToast( icon:\'error\', title:"上传不能超过"+that.data.tpNum+"张" ) return for (var i = 0; i < tempFilePaths.length; i++) imgs.push(tempFilePaths[i]); that.triggerEvent(\'tpupload\', imgs:imgs ) that.setData( imgs: imgs ); ); , )
// wxss
/* pages/component/uplaodimages/index.wxss */ .icon width: 20px; .addimage /* padding: 10px; */ /* border: 1px solid #ddd; border-radius: 10px; width: 100rpx; height: 100rpx; */ .pic float: left; position: relative; margin-right: 9px; margin-bottom: 9px; width: 120rpx; height: 120rpx; border-radius: 6px; overflow: hidden; .pic image width: 100%; height: 100%; .delete-btn position: absolute; top: 0; right: 0; .maincenter justify-content: center; position: fixed; bottom: 10px; left: 0; right: 0; .weui-uploader padding: 10rpx;
2.七牛云图片上传函数封装
import qiniuUploader from "../static/lib/qiniuUploader"; // 引入七牛云官方的js,若出现下载的有问题,可以试试我的,放在最底部了
function uploadFile(imgArr, callback) let promisevariable = new Promise(function (resolve, reject) qiniuUploader.upload( imgArr, //上传的图片 (res) => //回调 success console.log(res, \'七牛云返回\') resolve(res.imageURL) , (error) => //回调 fail reject(\'error\'); , // 参数设置 地区代码 token domain 和直传的链接 注意七牛四个不同地域的链接不一样,我使用的是华南地区 region: \'z2\', uptokenURL: getApp().globalData.host+\'/xxxx\', uploadURL: \'https://cdn.xxx.com\', domain: \'https://cdn.xxx.com\', ) ) return promisevariable;
3.父组件使用子组件
// json文件中引入子组件
"tpupload": "/component/tpupload/tpupload",
//wxml文件中引入子组件
<tpupload bind:tpupload="tpupload" imgs="imgs" tpNum=\'9\' ></tpupload>
// 发布规则,先上传图片到七牛云,再将七牛云返回的图片地址一起将参数传给后台
// 发布 publish(e) if(this.data.imgs.length <= 0) reFun.toastBox(\'error\', \'请上传至少1张图片\') return; var obj = ; // 用来传给后台的参数var arr = []; // for(let i = 0; i < this.data.imgs.length; i++) var promiseFun = reFun.uploadFile(this.data.imgs[i]) // 将promise封装的函数进行赋给变量 arr.push(promiseFun) Promise .all(arr) // arr是通过循环遍历而来的函数数组,all是一起执行数组里所有的函数 .then(function(results) // results返回的是处理所有函数返回 的结果 obj.imgs = results; // 将图片放进obj里,再传给后台 uriFun.saveSecondShop(this, obj) ); ,
// 如果下载的七牛云js有问题,可以试试
(function () var config = qiniuRegion: \'\', qiniuImageURLPrefix: \'\', qiniuUploadToken: \'\', qiniuUploadTokenURL: \'\', qiniuUploadTokenFunction: null, qiniuShouldUseQiniuFileName: false module.exports = init: init, upload: upload, // 在整个程序生命周期中,只需要 init 一次即可 // 如果需要变更参数,再调用 init 即可 function init(options) config = qiniuRegion: \'\', qiniuImageURLPrefix: \'\', qiniuUploadToken: \'\', qiniuUploadTokenURL: \'\', qiniuUploadTokenFunction: null, qiniuShouldUseQiniuFileName: false ; updateConfigWithOptions(options); function updateConfigWithOptions(options) if (options.region) config.qiniuRegion = options.region; else console.error(\'qiniu uploader need your bucket region\'); if (options.uptoken) config.qiniuUploadToken = options.uptoken; else if (options.uptokenURL) config.qiniuUploadTokenURL = options.uptokenURL; else if (options.uptokenFunc) config.qiniuUploadTokenFunction = options.uptokenFunc; if (options.domain) config.qiniuImageURLPrefix = options.domain; config.qiniuShouldUseQiniuFileName = options.shouldUseQiniuFileName function upload(filePath, success, fail, options, progress, cancelTask, before, complete) if (null == filePath) console.error(\'qiniu uploader need filePath to upload\'); return; if (options) updateConfigWithOptions(options); if (config.qiniuUploadToken) doUpload(filePath, success, fail, options, progress, cancelTask, before, complete); else if (config.qiniuUploadTokenURL) getQiniuToken(function () doUpload(filePath, success, fail, options, progress, cancelTask, before, complete); ); else if (config.qiniuUploadTokenFunction) config.qiniuUploadToken = config.qiniuUploadTokenFunction(); if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) console.error(\'qiniu UploadTokenFunction result is null, please check the return value\'); return doUpload(filePath, success, fail, options, progress, cancelTask, before, complete); else console.error(\'qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]\'); return; function doUpload(filePath, success, fail, options, progress, cancelTask, before, complete) if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) console.error(\'qiniu UploadToken is null, please check the init config or networking\'); return var url = uploadURLFromRegionCode(config.qiniuRegion); var fileName = filePath.split(\'//\')[1]; if (options && options.key) fileName = options.key; var formData = \'token\': config.qiniuUploadToken ; if (!config.qiniuShouldUseQiniuFileName) formData[\'key\'] = fileName before && before(); var uploadTask = wx.uploadFile( url: url, filePath: filePath, name: \'file\', formData: formData, success: function (res) var dataString = res.data // // this if case is a compatibility with wechat server returned a charcode, but was fixed // if(res.data.hasOwnProperty(\'type\') && res.data.type === \'Buffer\') // dataString = String.fromCharCode.apply(null, res.data.data) // try var dataObject = JSON.parse(dataString); //do something var fileUrl = config.qiniuImageURLPrefix + \'/\' + dataObject.key; dataObject.fileUrl = fileUrl dataObject.imageURL = fileUrl; // console.log(dataObject); if (success) success(dataObject); catch (e) console.log(\'parse JSON failed, origin String is: \' + dataString) if (fail) fail(e); , fail: function (error) console.error(error); if (fail) fail(error); , complete: function (err) complete && complete(err); ) uploadTask.onProgressUpdate((res) => progress && progress(res) ) cancelTask && cancelTask(() => uploadTask.abort() ) function getQiniuToken(callback) wx.request( url: config.qiniuUploadTokenURL, header: \'Content-Type\': "application/json", // \'Cookie\': \'vertx-web.session=\' + wx.getStorageSync("sessionId") , success: function (res) var token = res.data.message; if (token && token.length > 0) config.qiniuUploadToken = token; if (callback) callback(); else console.error(\'qiniuUploader cannot get your token, please check the uptokenURL or server\') , fail: function (error) console.error(\'qiniu UploadToken is null, please check the init config or networking: \' + error); ) function uploadURLFromRegionCode(code) var uploadURL = null; switch (code) case \'ECN\': uploadURL = \'https://up.qiniup.com\'; break; case \'NCN\': uploadURL = \'https://up-z1.qiniup.com\'; break; case \'z2\': uploadURL = \'https://up-z0.qiniup.com\'; break; case \'NA\': uploadURL = \'https://up-na0.qiniup.com\'; break; case \'ASG\': uploadURL = \'https://up-as0.qiniup.com\'; break; default: console.error(\'please make the region is with one of [ECN, SCN, NCN, NA, ASG]\'); return uploadURL; )();
web上传图片到七牛云服务器(代码片段)
本文通过javaweb的使用,把要上传的图片通过浏览器上传到服务器上面.`文本仅供参考,可能出现很多不合理;`1创建对应的jsp页面:下面是jsp下面的对应的from表单,上传文件用的那么ImgFiles的属性名称,同样你可以使用其他的,或者... 查看详情
thinkphp6上传图片七牛云如何上传文件到七牛云对象储存cos
参考技术AThinkPHP6如何上传图片七牛云,如何上传文件到七牛云对象储存cos,总所周知图片是特别消耗网站带宽的,个人网站将图片上传至七牛云才能显著提升网站的响应速度,手把手交大家如何上配置ThinkPHP6上传文件至七牛云.然后我... 查看详情
ueditor上传图片到七牛云存储(formapi,java)
转:http://my.oschina.net/duoduo3369/blog/174655ueditor上传图片到七牛云存储ueditor结合七牛传图片七牛的试炼开发前的准备与注意事项说明Let‘srock与ueditor结合前的准备工作首先从表单开始生成token建立图片空间生成token上传流程集成ueditor... 查看详情
上传base64图片到七牛云前端遇到的坑
介意前端普通引入七牛云SDk上传图片到七牛云需要多个js,所以才有了base64的上传方式,简化操作,(懒。)七牛云官方文档如下https://developer.qiniu.com/kodo/kb/1326/how-to-upload-photos-to-seven-niuyun-base64-code 我们前端理所当然就... 查看详情
前端上传图片头像到七牛云格式变成text
参考技术A流程:七牛云后台的对象存储功能,nodejs后台生成七牛云的token,前端利用elementUI/ice的upload组件,文件名和token作为参数请求到七牛云后台。配置已经完成,写接口用的是express,koa同理,主要做法是先接收前端的图片... 查看详情
php表单上传图片到七牛云存储并返回地址……求具体流程~有代码更好
...的资料太少了。研究了下API之后,现在已经能实现图片的上传和下载及上传之后的重定向。首先本篇文章实现的功能如下:1.利用表单上传功能,用户可以点击选择文件按钮,选择本地的一个文件,同时设定上传的图片的名称,... 查看详情
七牛云文件上传助手(代码片段)
...上传工具,于是写了这样的一个工具。效果使用方法下载程序包点击下载解压后直接在config.json文件里面天上自己七牛云相关的信息。config"access_key":"************"," 查看详情
go实战|电商平台图片上传到七牛云(代码片段)
...息2.config3.upload完整代码这一章节中我们介绍如何把图片上传到七牛云,并且返回对应图片的url。因为后续我们的创建的商品,更换头像等等都是把我们的图片上传七牛云存储,再返回对应的url的。1.获取配置信息打开... 查看详情
文件流数组上传到七牛云
首先要注册七牛云,申请个空间,获得密钥、等东西,引入官方sdk包,然后再开发文档中找到代码copy进去就可以了。因为非常简单,我就直接弄上代码了。1packagecom.qianmo.foru.bean.request;23importcom.qianmo.core.common.CommonRequest;4importorg.hi... 查看详情
小程序上传文件到七牛云
参考技术A第一步:获取七牛云token,这步操作很简单,请求七牛云接口即可getUpToken:function() varurl="resource/getUpToken" varheader= token:wx.getStorageSync("token") varthat=this ... 查看详情
springboot上传文件到七牛云
准备工作mavenpom.xml添加七牛云的sdk依赖<dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.2.27</version></dependency>配置项七牛云上传 查看详情
如何将图片上传到七牛云平台?
参考技术A上一篇文章介绍了“如何将图片上传到Cloudinary云平台?”但是由于Cloudinary的服务器在国外,所以上传和读取图片的速度会很慢,不适合用作生产,因此有必要再介绍一下国内广受欢迎的“七牛”云平台。以及分步骤给... 查看详情
php上传文件与图片到七牛的实例详解(代码片段)
上传文件到七牛最简单的方式就是使用七牛官方最新的SDK用composer安装PHPSDKcomposer require qiniu/php-sdk 上传文件到七牛use QiniuAuth;use QiniuStorageUploadManager;$cfg = [ ‘access‘ =>&nb 查看详情
vue3+typescript上传文件到七牛云
.../detail/21414BX0Uleafage-ms项目写了很久了,但是一直没有完成上传文件的功能,之前看了几次七牛云的文档,折腾了几次,没有成功,今天下了决心必须解决这个问题就又开始了各种找资料,看文档,看示例,终于搞定了。项目中使... 查看详情
java向七牛云上传图片的摆动程序(代码片段)
java实现上传网络图片到七牛云存储(代码片段)
...中,给我们返回该图片的地址。代码实现因为七牛云上传图片的时候,传递的是MultipartFile类型,所以我们需要将网络图片utl转换 查看详情
java实现上传网络图片到七牛云存储(代码片段)
...中,给我们返回该图片的地址。代码实现因为七牛云上传图片的时候,传递的是MultipartFile类型,所以我们需要将网络图片utl转换 查看详情
vue上传图片到七牛云实用攻略
参考技术Avue一般采用element 的upload上传图片/文件。首先,设定参数参考Element upload 文档其次,如图所示,重点在于domain和qiniuaddr两个参数! 参考七牛云存储图片域名文档然后 上传一定要先获取到七... 查看详情