Java 服務端接口要求 byte[] 參數,Python 客戶端調用,Python 無原生 byte 類型(3.x 有 bytes),如何正確傳遞?
HTTP/JSON 不直接承載二進制,**Base64 將 byte[] 編碼為 ASCII 字符串**是標準做法。
import base64
import requests
def java_byte_array_to_base64(data: bytes) -> str:
"""Python bytes -> Base64 字符串 (Java byte[] 接收端需解碼)"""
return base64.b64encode(data).decode('ascii')
def base64_to_java_byte_array(b64str: str) -> bytes:
"""Base64 字符串 -> Python bytes (對應 Java byte[])"""
return base64.b64decode(b64str)
# 調用示例
file_bytes = open('image.jpg', 'rb').read()
payload = {
'fileData': java_byte_array_to_base64(file_bytes), # 傳字符串
'fileName': 'image.jpg'
}
resp = requests.post('https://java-server/api/upload', json=payload)
@PostMapping("/upload")
public Result upload(@RequestBody Map payload) {
String base64 = payload.get("fileData");
byte[] data = Base64.getDecoder().decode(base64); // 標準庫解碼
// 處理 data...
}
bytearray 直接 JSON 序列化:會變成數字數組 [72, 101, 108, 108, 111],體積膨脹 3-4 倍,Java 端需自定義反序列化。base64.urlsafe_b64encode 避免 +/= 轉義問題。用戶確認:「正確答案 已經試過 成功 感謝開源社區」——**Base64 是跨語言二進制傳輸的通用橋梁**。