Java学习笔记(二十四):微信获取临时素材,然后存到oss

开始获取临时素材时,遇到好多问题,下面是问题总结:
1、不知道调用”获取临时素材”接口返回的是什么东西,其实就是返回图片数据流,如果直接用浏览器打开链接(即该接口),就会提示下载图片
2、获取临时素材,返回的信息头部的Content-type是application/json,是因为出错了,可以通过BufferReader读取获取的InputStream,换成字符串,就会提示错误码和错误信息,我这里因为接口地址url写错,然后一直提示access_token无效(地址错误不应该访问不到吗,为啥提示access_token无效,这个还不清楚)。
3、整个流程不懂,其实不难,就是先打开本地图片,然后上传到微信服务器,再获取临时素材,最后上传到oss,下面是oss上传的代码,和前台选择图片并调用后台程序进行上传的脚本
例子:OSS.java

package com.prositech.utils;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;

import com.aliyun.oss.OSSClient;
import com.google.gson.JsonObject;

public class OSS {
public static void main(String[] args) throws FileNotFoundException
{
    String unionid = "*********************";
    String media = "***********************";
    String accessToken = "***********************";     //默认有效期7200
    upload(unionid,media,accessToken);
}

public static String upload(String unionid,String media,String accessToken) {  
         // endpoint以杭州为例,其它region请按实际情况填写
            String endpoint = "http://oss-cn-beijing.aliyuncs.com";
            // accessKey请登录https://ak-console.aliyun.com/#/查看
            String accessKeyId = "****************";
            String accessKeySecret = "******************";
            String bucketName = "11j";
            //这里,图片名字不能写死,得用变量替代,否则上传到阿里云oss后,图片提示损坏,打不开
            String key = "clothes/wardrobe/"+unionid+"/"+media+".jpg";
            // 创建OSSClient实例
            OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);  
         // 拼接请求地址  
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";  
            requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", media);  
            System.out.println(requestUrl);  
            try {  
                URL url = new URL(requestUrl);  
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
                conn.setDoInput(true);  
                conn.setRequestMethod("GET");  
                conn.connect();
                InputStream input = conn.getInputStream();
                System.out.println(conn.getResponseMessage());
                System.out.print(conn.getContentType());
                ossClient.putObject(bucketName, key, input);
                conn.disconnect();  
            } catch (Exception e) {  
                System.out.println(e);  
            }  
            return "success";  
        }  
}

下面是前台的脚本

<script>    
    function wxScan() { 
        wx.scanQRCode({
            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
            scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
            success: function (res) {
                var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                window.location.href=result;
            }
        });
      }
    function wxChooseImage(cloth)
    {
        var accessToken = $("#access_token").attr("value");
        wx.chooseImage({
            count: 1, // 默认9
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
            success: function (res) {
            var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
            if(cloth == 1)
            $("#coat").attr("src",localIds);
            else
                $("#paint").attr("src",localIds);
            //上传图片到微信服务器,然后从微信服务器转存到阿里云
            wx.uploadImage({
                localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得
                isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function (res) {
                var serverId = res.serverId; // 返回图片的服务器端ID
                $("#serverId").attr("value",serverId);
                $.ajax({
                    url:'ido.action/uploadImage?media='+serverId+'&accessToken='+accessToken,
                    type:"get",
                    success:function(data){
                    },
                    error:function(error){
                        alert(error['responseText']);
                    } 
                });
                }
            });
        }
        });
    }

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值