android - 在Android中将图像上传到服务器的问题
问题描述
将图像上传到服务器时遇到问题。我有一个上传 url,我必须把图片放到这个 url。我已经尝试了很多次,但收到错误请求错误。
这是我的 API 接口
interface APIInterface {
@PUT
fun uploadImage(@Url url:String,@Body image:RequestBody, @HeaderMap headers:HashMap<String,String>):Call<BaseResponse>
}
这是我调用方法的代码
val requestBody = RequestBody.create(
null,
File(photoPath)
val headers = HashMap<String, String>()
headers["Content-Type"] = "image/jpeg"
headers["extension"] = "jpeg"
headers["Authorization"] = token!!
val call=service.uploadImage(url,requestBody ,headers)
解决方案
通常,我们在 Multipart 中上传文件/图像,因此有这个假设。因此,如果您的 API 也需要 Multipart,那么您可以执行以下操作。
@Multipart
@POST("/api/devices/{device_id}/image")
Call<ResponseBody> uploadPhoto(String device_id, @Part MultipartBody.Part image);
您可以从这样的图像路径创建位图
Bitmap bitmap = BitmapFactory.decodeFile(imagePhotoPath);
您可以从位图创建多部分
public static MultipartBody.Part getPhotoUploadRequestBody(Bitmap bitmap, int compressionQuality) {
Log.d(TAG, "** getPhotoUploadRequestBody(Context context, Bitmap bitmap) Started ");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, compressionQuality, stream);
byte[] byteArray = stream.toByteArray();
bitmap.recycle();
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), byteArray);
String name = "file"; //Server API expects this
MultipartBody.Part body = MultipartBody.Part.createFormData(name, name, requestBody);
Log.d(TAG, "** MultipartBody.Part body created ");
return body;
}
推荐阅读
- mongodb - 无法将用户数据发布到 mongodb 中的数据库
- python - 无法使用灵活的谷歌应用引擎将 logging.info 消息写入堆栈驱动程序
- java - 如何在 Maven 中使用 1 个 Jar 执行子项目?
- java - 如何将 Gradle 2.0 的 Gradle 性质添加到 Eclipse 项目
- scala - IntelliJ IDea:导入更改时从模块中卸载的本地工件
- android - ListView 填充但每个视图一开始都是空白的?
- python - 无法让此循环正常运行
- git - 路径未指向有效的 Git 存储库或工作目录
- jpa - 如何删除 JPA 中未分配的实体?
- python - Python 没有检测到语法错误