OkHttps 文件上傳

2020-10-22 11:33 更新
http.sync("/upload")
        .addFileParam("test", "D:/download/test.zip")
        .post()     // 上傳發(fā)法一般使用 POST 或 PUT,看服務(wù)器支持

  異步上傳也是完全一樣:

http.async("/upload")
        .addFileParam("test", "D:/download/test.zip")
        .post()

對(duì)接微信的時(shí)候,需要通過(guò)后臺(tái)再把圖片上傳到微信,得到 mediaId 后再執(zhí)行后面操作。

圖片上傳接口

@PostMapping("upload")
public WebResult<ImageUploadResult> upload(@RequestParam("img") MultipartFile file) {
    final byte[] bytes;
    try {
        bytes = file.getBytes();
    } catch (IOException e) {
        log.warn("fail to read file", file.getOriginalFilename(), e);
        return new WebResult<>(500, "服務(wù)器錯(cuò)誤,請(qǐng)稍后再試");
    }
    String md5Hex = DigestUtils.md5Hex(bytes).toUpperCase();
    Map<String, String> mapToSign = new HashMap<>(8);
    mapToSign.put("mch_id", MCH_ID);
    mapToSign.put("media_hash", md5Hex);
    mapToSign.put("sign_type", "HMAC-SHA256");
    //計(jì)算簽名
    String sign = SignUtils.createSign(mapToSign, "HMAC-SHA256", MCH_KEY, null);

    
    //構(gòu)造請(qǐng)求Body
    MultipartBody body = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("mch_id", MCH_ID)
            .addFormDataPart("media_hash", md5Hex)
            .addFormDataPart("sign_type", "HMAC-SHA256")
            .addFormDataPart("media", file.getOriginalFilename(), RequestBody.create(MediaType.parse("image/" + FileNameUtil.getExtension(file.getOriginalFilename())), bytes))
            .addFormDataPart("sign", sign)
            .build();

 
    //構(gòu)造請(qǐng)求
    Request request = new Request.Builder().url("https://api.mch.weixin.qq.com/secapi/mch/uploadmedia")
            .post(body)
            .build();
    OkHttpClient client = new OkHttpClient.Builder()
            .sslSocketFactory(sslManager.getSocketFactory())
            .build();
    //后面的省略了...
}

常見(jiàn)錯(cuò)誤

  • 遺漏 MultipartBody.FORM:需要設(shè)置

setType(MultipartBody.FORM)

  • 簽名錯(cuò)誤:需要指定簽名算法HMAC-SHA256
  • 其他問(wèn)題:上傳到微信的時(shí)候,還需要 SSL 配置,下一篇文章再介紹如何在 OkHttp 中配置 SSL 證書
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)