base64编码上传七牛云

本文介绍了Java后台采用读取照片并编码后上传图片到七牛云的方式,主要实现Base64编码上传。包含获取七牛token、生成Base64编码以及Base64上传并返回uuid等代码实现,还给出了官方文档链接,仅作交流学习用。

官方文档:https://developer.qiniu.com/kodo/kb/1326/how-to-upload-photos-to-seven-niuyun-base64-code,

java后台上传图片方式采用读取照片并编码后上传

本次主要实现base64编码上传

/**

  • 七牛token
  • @return
    */
    public JSONObject getQiNiuToKen() {
    String accessKey = “xxxxxxxxxxxxxxxxx”;
    String secretKey = “xxxxxxxxxxxxxxxxxxx”;
    String bucket = “xxxxxx”;
    Auth auth = Auth.create(accessKey, secretKey);
    String upToken = auth.uploadToken(bucket);
    JSONObject json = new JSONObject();
    json.put(“uptoken”, upToken);
    return json;
    }

生成base64编码

public byte[] getWxacode(String scene,String path){
Map<String,Object> param = new HashMap<String,Object>();
param.put(“scene”, scene);
param.put(“page”, path);
param.put(“width”, width);
param.put(“auto_color”, false);
Map<String,Object> line_color = new HashMap<>();
line_color.put(“r”, 0);
line_color.put(“g”, 0);
line_color.put(“b”, 0);
param.put(“line_color”, line_color);
RestTemplate rest = new RestTemplate();

  try {
     MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
     HttpEntity requestEntity = new HttpEntity(JSON.toJSONString(param), headers);
     ResponseEntity<byte[]> entity = rest.exchange(CODE_ULR+"?access_token="+accessToken, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
     byte[] result = entity.getBody();
     return  result;
  } catch (Exception e) {
      // logger.info(e.getMessage());
  }finally {

  }
  return null;

}

/**

  • base64上传并返回uuid

  • @param base64

  • @return

  • @throws IOException
    */
    public Object getBase64ToString(byte[] base64) {
    JSONObject json = getQiNiuToKen();
    String uuid = UUID.randomUUID().toString().replaceAll("-", “”);
    String upToken = json.getString(“uptoken”);
    String file64 = com.qiniu.util.Base64.encodeToString(base64, 0);
    String url = “https://upload-z2.qiniup.com/putb64/” + base64.length + “/key/” + UrlSafeBase64.encodeToString(uuid);
    //非华东空间需要根据注意事项 1 修改上传域名 华南域名用upload-z2.qiniup.com

    RequestBody rb = RequestBody.create(null, file64);
    Request request = new Request.Builder().
    url(url).
    addHeader(“Content-Type”, “application/octet-stream”)
    .addHeader(“Authorization”, "UpToken " + upToken)
    .post(rb).build();
    //System.out.println(request.headers());
    OkHttpClient client = new OkHttpClient();
    okhttp3.Response response = null;
    try {
    response = client.newCall(request).execute();
    System.out.println(response);
    } catch (Exception e) {
    ResultMsg.Error(“错误信息” + e);
    } finally {
    if (response.code() == 200) {
    return uuid;
    } else {
    return ResultMsg.Error(“上传失败”);
    }
    }
    }

本文仅作交流学习,希望以后有所帮助

在前端实现七牛云Base64 文件上传,且无需后端协助的情况下,可以通过七牛云 JavaScript SDK 结合 Base64 数据上传的方式完成操作。以下是实现的关键步骤和注意事项: ### 1. 获取上传凭证 (Token) 通常情况下,七牛云上传需要一个上传凭证(Token),用于授权上传操作。然而,在完全前端实现的场景中,可以采用**临时上传凭证**或者**公共写入权限**的七牛存储空间(Bucket)来实现无需后端协助的上传。 - **公共写入 Bucket**:如果业务允许,可以配置一个公共写入权限的 Bucket,这样上传时无需 Token,但这种方式存在安全风险,建议仅用于测试环境。 - **临时 Token 获取**:也可以通过后端提供一个临时 Token 获取接口,但在当前场景中假设无法获得后端支持,因此需依赖其他方式。 ### 2. Base64 文件上传实现 七牛云 SDK 支持直接上传 Base64 编码的数据。上传时需注意以下几点: - **文件名编码**:七牛云要求上传的文件名需为 Base64 编码格式,否则可能导致上传失败。因此,上传时需对文件名进行 `btoa()` 编码。 - **使用 JavaScript SDK**:七牛云提供了 JavaScript SDK(Qiniu.js),可直接在前端使用。 #### 示例代码 ```html <script src="https://cdn.jsdelivr.net/npm/qiniu-js@2.5.0/dist/qiniu.min.js"></script> <script> // 假设已有 Base64 数据(去除 data:image/png;base64, 部分) const base64Data = 'iVBORw0KGgoAAAANSUhEUgAAAGQAAAA...'; // 七牛云上传配置(若 Bucket 为公共写入,可不传 token) const config = { useCdnDomain: true, region: qiniu.region.z0 }; // 生成唯一的文件名并进行 Base64 编码 const fileName = 'image-' + Date.now() + '.png'; const encodedFileName = btoa(fileName); // 初始化上传参数 const observable = qiniu.upload(base64Data, encodedFileName, null, { mimeType: ['image/png', 'image/jpeg', 'image/gif'] }, config); // 上传结果监听 const observer = { next(res) { console.log('上传进度:', res.total.percent); }, error(err) { console.error('上传失败:', err); }, complete(res) { console.log('上传成功:', res); // res.key 为上传后的文件名 } }; // 开始上传 observable.subscribe(observer); </script> ``` ### 3. 安全性与注意事项 - **Token 安全性**:如前所述,若无法获取 Token,则需使用公共写入 Bucket,但这种方式存在数据泄露或被滥用的风险,不建议在生产环境中使用。 - **文件名编码**:上传文件名必须进行 Base64 编码,否则可能导致上传失败[^2]。 - **跨域问题**:确保七牛云的 Bucket 配置了正确的 CORS 规则,以支持前端跨域上传请求。 ### 4. 上传成功后的处理 上传成功后,七牛云会返回一个 `key`,即文件名。通过拼接七牛云的访问域名和该文件名,即可获得文件的访问地址,例如: ```javascript const domain = 'https://yourdomain.com/'; const fileUrl = domain + encodedFileName; ``` ### 5. 适用场景 此方法适用于小型文件(如用户头像、小图等)的上传需求,不适合大文件或频繁上传的场景,因为 Base64 数据体积较大,且上传过程可能影响页面性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值