使用微信JS-SDK图像接口上传图片简单实例

本文详细介绍如何在微信环境中(iOS和安卓)选择并上传微信相册图片至本地,包括js版本兼容、前后端交互流程及核心代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.完整实现ios和安卓微信环境选择微信相册图片并上传保存在本地
2.注意js版本兼容,使用该版本

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript"></script>

官方解释
使用微信JS-SDK图像接口上传图片简单实例
3.本实例流程将先调用wx.chooseImage接口获取选择的图片localId,返回localId在安卓微信可以作为img标签的src属性显示图片,但在ios下需要再调用wx.getLocalImgData接口来显示图片,然后要保存图片需调用wx.uploadImage接口将图片上传至微信服务器返回serverId,将serverId放至隐藏域提交后端,由后端调用微信多媒体接口下载保存到自己服务器,多媒体获取接口为:

http://file.api.weixin.qq.com/cgi-bin/media/get?access_token="token()"&media_id="serverId"

4.前端核心代码如下:

.....
.....
        <div class="upload-box">
            <div  class="z_file">
                <div id="uploaderBox"></div>
            </div>
            {volist name='question.reply_img' id='item'}
                {if condition="$item"}
                  <div class="z_addImg">
                    <a class="shc-btn shc-btn-id" href="javascript:;"></a>
                    <img src="{$item|default=""}">
                    <input name="edit_img_key[]" value="{$item}"></input>
                  </div>
                {/if}
            {/volist}
        </div>
.....
.....
wx.config({
            // 配置信息, 即使不正确也能使用 wx.ready
            debug: false,
            appId:"{$signPackage.appId}",
            timestamp:"{$signPackage.timestamp}",
            nonceStr:"{$signPackage.nonceStr}",
            signature:"{$signPackage.signature}",
            jsApiList: [
                // 所有要调用的 API 都要加到这个列表中
                'uploadImage',
                'chooseImage',
                'getLocalImgData',
            ]
        });
        var imgContainer = document.getElementsByClassName("upload-box")[0];
        $("#uploaderBox").on("click", function(e) {
            wx.chooseImage({
                count: 9, // 默认9
                sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
                sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
                success: function (res) {
                    var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
                    var i = 0, length = localIds.length;//循环操作9张图片
                    function upload() {
                        var serverId = '';
                        wx.uploadImage({
                            localId: localIds[i], // 需要上传的图片的本地ID,由chooseImage接口获得
                            isShowProgressTips: 1, // 默认为1,显示进度提示
                            success: function (res) {
                                serverId = res.serverId; // 返回图片的服务器端ID
                                if(agent_type == 'android')
                                {
                                    var localData = localIds[i]; // localData是图片的base64数据,可以用img标签显示
                                    //追加html
                                    var img = document.createElement("img");
                                    var input = document.createElement("input");
                                    var ass = document.createElement("a");
                                    img.setAttribute("src", localData);
                                    input.setAttribute("name", "serverId[]");
                                    input.setAttribute("value", serverId);
                                    var imgAdd = document.createElement("div");
                                    imgAdd.setAttribute("class", "z_addImg");
                                    ass.setAttribute("class", "shc-btn");
                                    ass.setAttribute("id", "shc-btn"+id);
                                    ass.setAttribute("href", "javascript:;");
                                    imgAdd.appendChild(ass);
                                    imgAdd.appendChild(img);
                                    imgAdd.appendChild(input);
                                    imgContainer.appendChild(imgAdd);
                                    imgRemove(id);//删除按钮
                                    id++;
                                }
                                else
                                {
                                    wx.getLocalImgData({
                                        localId: localIds[i], // 图片的localID
                                        success: function (res) {
                                            var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
                                            var img = document.createElement("img");
                                            var input = document.createElement("input");
                                            var ass = document.createElement("a");
                                            img.setAttribute("src", localData);
                                            input.setAttribute("name", "serverId[]");
                                            input.setAttribute("value", serverId);
                                            var imgAdd = document.createElement("div");
                                            imgAdd.setAttribute("class", "z_addImg");
                                            ass.setAttribute("class", "shc-btn");
                                            ass.setAttribute("id", "shc-btn"+id);
                                            ass.setAttribute("href", "javascript:;");
                                            imgAdd.appendChild(ass);
                                            imgAdd.appendChild(img);
                                            imgAdd.appendChild(input);
                                            imgContainer.appendChild(imgAdd);
                                            imgRemove(id);
                                            id++;
                                        }
                                    });
                                }
                                i++;
                                if (i < length) {
                                    upload();
                                }
                            }
                        });
                    }
                    upload();
                }
            });
        });

5.后端核心代码如下:


foreach ($data['serverId'] as $key => $value)
            {
                $str = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=".获取token."&media_id=".$value;
                $a = file_get_contents($str);
                if($a)
                {
                    $resource = fopen(ROOT_PATH."/uploads/".$value.".jpg" , 'w+');
                    fwrite($resource, $a);
                    fclose($resource);
                    $imgs[] = "/uploads/".$value.".jpg";
                }
            }

效果截图
使用微信JS-SDK图像接口上传图片简单实例

转载于:https://blog.51cto.com/14210437/2363702

### 微信小程序实现图片上传至腾讯云存储的方法 #### 准备工作 为了使微信小程序能够上传图片到腾讯云对象存储(COS),需先完成一些准备工作。这包括注册并登录腾讯云账号,创建存储桶(Bucket), 并开启对应权限以及下载对应的SDK等操作[^2]。 #### 配置环境 确保已安装最新版本的微信开发者工具,并且项目中引入了腾讯云COS SDK。可以通过npm或者直接在`miniprogram/package.json`里添加依赖来集成此库。 #### 封装上传函数 下面是一个简单的例子展示怎样封装一个用于上传单张照片到指定bucket中的功能: ```javascript const COS = require('cos-wx-sdk-v5'); // 初始化 cos sdk var cos = new COS({ SecretId: 'your_secret_id', // 用户的 SecretId SecretKey: 'your_secret_key' // 用户的 SecretKey }); function uploadImage(filePath, callback) { const fileName = filePath.match(/([^\/\\]+)\.\w+$/)[1]; cos.putObject({ Bucket: 'example-bucket-1250000000', Region: 'ap-guangzhou', Key: `${fileName}.jpg`, /* 文件名 */ Body: filePath, StorageClass: 'STANDARD' }, function(err, data){ if (!err && data.statusCode === 200) { console.log("Upload succeeded"); typeof(callback)==='function'&&callback(null,data.Location); }else{ console.error(`Error uploading file ${filePath}`, err || data.message); typeof(callback)==='function'&&callback(err||data.message,null); } }); } ``` 上述代码展示了如何利用腾讯云提供的JavaScript SDK `cos-wx-sdk-v5` 来初始化客户端实例并将本地路径下的图像文件发送给服务器端处理。 #### 使用示例 调用上面定义好的uploadImage()方法即可执行实际的照片上传动作: ```javascript wx.chooseImage({ count: 1, sizeType: ['original'], sourceType: ['album','camera'], success(res){ let tempFilePaths=res.tempFilePaths; wx.showLoading({title:'正在上传...'}); uploadImage(tempFilePaths[0],(error,url)=>{ wx.hideLoading(); if(!error){ wx.showToast({ title:"上传成功", icon:"success"}); console.log(url); // 打印返回链接地址 } else { wx.showToast({ title:error}); } }) }, }) ``` 这段脚本允许用户通过相册或相机选取一张图片后立即启动上传流程,在完成后显示相应的提示信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值