如何通过Java代码发送携带图片文件的PUT请求上传至Blob存储?
问题原因及修复方案
现有代码核心错误点
- 初始化请求时错误设置了
ContentType.JSON,虽然后续覆写了Content-Type,但该冗余配置可能引发序列化逻辑异常 - 构造请求参数后重复调用
.given()方法,会重置之前已经配置的请求头、请求体等所有参数,导致实际发送的请求不符合预期 - 自定义的
convertImageToBinary方法如果存在编码或读取异常,会导致上传的二进制内容损坏,直接传入File对象由RestAssured处理二进制流更可靠
修复后代码
RestAssured.baseURI = "https://mediasa.blob.core.windows.net"; // 直接构造请求,移除多余的JSON类型配置 RequestSpecification request = RestAssured.given() .header("x-type", "internal") .header("Content-Type", "application/octet-stream") .header("x-ms-blob-type", "BlockBlob") // 直接传入File对象,不需要自行转换二进制 .body(new File("image.jpeg")) .filter(new RequestLoggingFilter(requestCapture)); // 直接调用put方法,不要重复调用given() Response response = request.put(sas);
额外验证点
- 确认
sas变量的取值是完整的Blob上传路径+SAS令牌,和Postman的curl请求目标地址一致 - 确认图片文件的路径正确,代码运行时有权限读取该文件
- 如果需要保留自行转换二进制的逻辑,确认
convertImageToBinary方法返回的是原始字节数组byte[],不要做任何额外编码转换
内容的提问来源于stack exchange,提问作者Eyal
相关产品推荐
相关产品推荐

