我正在开发一个 Android 应用程序,它发布一些用户输入的数据和用户签名(使用签名板捕获签名并将其转换为 bmp 文件)。
现在,在发布整个数据之前,我需要请求服务器上传我的画布签名。所以服务器将回复两个 url(参考图片 1),分别是 put url 和 get url 现在我必须使用 PUT url 上传签名图像文件,整个过程通过邮递员成功,但我无法在 Android 应用程序上实现。Put URl 的主体是二进制的,我选择一些随机图像文件。仅供参考,请参阅随附的屏幕截图
Retrofit retrofit_image_upload=new Retrofit.Builder()
.baseUrl(Aws_url) // base url retrive using Uri class using uri.getAuthority and concat with "https:/"
.addConverterFactory(GsonConverterFactory.create())
.build();
ByteArrayOutputStream stream=new ByteArrayOutputStream();
signature.compress(Bitmap.CompressFormat.PNG,100,stream);
byte[] byteArray=stream.toByteArray();
final RequestBody requestBody=RequestBody.create(MediaType.parse("application/octet-stream"),byteArray);
现在调用api并传递数据
Call<Object> image_upload_call= null;
try {
image_upload_call = final_upload.aws_upload(path,auth,requestBody.contentLength(),x_amz_acl,AWSAccessKeyId,Expires,Signature_aws,requestBody);
} catch (IOException e) {
e.printStackTrace();
}
图片上传接口
@PUT("{Put_path}")
Call<Object> aws_upload(@Path("Put_path") String path,
@Header("auth") String auth,
@Header("Content-Length") long length,
@Query("x-amz-acl") String x_amz,
@Query("AWSAccessKeyId") String awskey,
@Query("Expires") String Expires,
@Query("Signature") String Awssignature,
@Body RequestBody image);
}
当我使用此代码设置服务器不接受来自 Android 应用程序的文件,响应是错误代码 403,当我尝试从邮递员软件上传图像文件时,它工作正常。那么我该如何将其实现到 Android 应用程序中呢?
largeQ
相关分类