android端生成token报错bad token

public class UploadToken  {

    public static  String getUploadToken(Object object){

        Gson gson=new Gson();

        String jsonObject=gson.toJson(object);

        String encodedPutPolicy = UrlSafeBase64.encodeToString(jsonObject);

        String encodedSign="";

        try {

            encodedSign =hmacSha1(encodedPutPolicy);

        }catch (Exception e){


        }

        String uploadToken = QiNiuConstant.ACCESSKEY + ":" + encodedSign + ":" + encodedPutPolicy;

        return uploadToken;

    }

    public  static   String hmacSha1(final String base)

            throws NoSuchAlgorithmException, InvalidKeyException {

        String type = "HmacSHA1";

        SecretKeySpec secret = new SecretKeySpec(QiNiuConstant.SECRETKEY.getBytes(), type);

        Mac mac = Mac.getInstance(type);

        mac.init(secret);

        byte[] digest = mac.doFinal(base.getBytes());

        return Base64.encodeToString(digest, Base64.URL_SAFE);

    }

其中Object的为:


public class ImagePutPolicy implements Serializable {

    private String scope;

    private long deadline;

    private ReturnBody returnBody;

    public ImagePutPolicy(String fileName) {

        scope = QiNiuConstant.SAVESPACE+":"+fileName;

    }


    public long getDeadline() {

        return deadline;

    }


    public void setDeadline(long deadline) {

        this.deadline = System.currentTimeMillis()/1000+deadline;

    }


    public ReturnBody getReturnBody() {

        return returnBody;

    }


    public void setReturnBody(ReturnBody returnBody) {

        this.returnBody = returnBody;

    }

}

上传代码为


  private void simpleUpload() {

        ImagePutPolicy putPolicy=new ImagePutPolicy(key);

        putPolicy.setDeadline(3600);

        token=UploadToken.getUploadToken(putPolicy);

        byte[] data=new byte[]{ 0, 1, 2, 3};

        

   


慕码人8056858
浏览 957回答 3
3回答

湖上湖

token不是后台生成过来的么-----------------------------------7-29编辑-------------------------------------------------这应该是七牛上传,所以需要安卓端生成token。如果是七牛上传,代码如下:public String getToken() {        try {            JSONObject _json = new JSONObject();            long _dataline = System.currentTimeMillis() / 1000 + 3600;            _json.put("deadline", _dataline);// 有效时间为一个小时            _json.put("scope", "images");            String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json                    .toString().getBytes());            byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey);            String _encodedSign = UrlSafeBase64.encodeToString(_sign);            String _uploadToken = AccessKey + ':' + _encodedSign + ':'                    + _encodedPutPolicy;            return _uploadToken;        } catch (Exception e) {            e.printStackTrace();            return "";        }    }         /**     *      * 使用 HMAC-SHA1 签名方法对对encryptText进行签名     *      * @param encryptText     *            被签名的字符串     * @param encryptKey     *            密钥     * @return     * @throws Exception     */    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey)            throws Exception {        byte[] data = encryptKey.getBytes(ENCODING);        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);        // 生成一个指定 Mac 算法 的 Mac 对象        Mac mac = Mac.getInstance(MAC_NAME);        // 用给定密钥初始化 Mac 对象        mac.init(secretKey);        byte[] text = encryptText.getBytes(ENCODING);        // 完成 Mac 操作        return mac.doFinal(text);    }希望对你有帮助,以上

德玛西亚99

1、第一次听说token是移动端生成的2、不禁想问:你们的服务端在忙什么
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java