Java 如何从相机和文件中获取base64string并将其发布到服务器?
我正在尝试将图像位图转换为base64string以将其发布到服务器,但它无法工作。它只是加载了很长时间,然后失败了 这是我在ActivityResult上的代码Java 如何从相机和文件中获取base64string并将其发布到服务器?,java,android,base64,android-camera,android-bitmap,Java,Android,Base64,Android Camera,Android Bitmap,我正在尝试将图像位图转换为base64string以将其发布到服务器,但它无法工作。它只是加载了很长时间,然后失败了 这是我在ActivityResult上的代码 @Override public void onActivityResult(int requenstCode, int resultCode, Intent data) { super.onActivityResult(requenstCode, resultCode, data); if (resultCode
@Override
public void onActivityResult(int requenstCode, int resultCode, Intent data) {
super.onActivityResult(requenstCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requenstCode == REQUEST_CAMERA) {
selectedImageBitmap = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(selectedImageBitmap);
} else if (requenstCode == SELECT_FILE) {
Uri selectedImageUri = data.getData();
try {
selectedImageBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri);
} catch (IOException e) {
e.printStackTrace();
}
imageView.setImageBitmap(selectedImageBitmap);
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
selectedImageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArrayImage = byteArrayOutputStream.toByteArray();
encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
}
}
请帮助如何使其工作不要使用base64字符串上载图像。压缩图像并将图像上载到服务器上 下面是一个简单的php脚本
<?php
$target_dir = "img/";
$target_dir = $target_dir .basename($_FILES["file"]["name"]);
$response = array();
// Check if image file is a actual image or fake image
if (isset($_FILES["file"]))
{
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir))
{
$success = true;
$message = "Successfully Uploaded";
}
else
{
$success = false;
$message = "Error while uploading ". $target_dir;
}
}
else
{
$success = false;
$message = "Required Field Missing";
}
$response["success"] = $success;
$response["message"] = $message;
echo json_encode($response);
?>
为文件上传创建一个接口
public interface FileUploadService {
@Multipart
@POST("upload.php")
Call<ResponseBody> upload(
@Part MultipartBody.Part file
);
@GET("images/{imageName}")
Call<okhttp3.ResponseBody> getImage(@Path("imageName") String imageName);
}
公共接口文件上传服务{
@多部分
@POST(“upload.php”)
呼叫上传(
@Part MultipartBody.Part文件
);
@获取(“images/{imageName}”)
调用getImage(@Path(“imageName”)字符串imageName);
}
在Android端,使用改型将压缩图像上传到服务器
file = new File(imagePath);
FileUploadService service =
getRetrofit().create(FileUploadService.class);
// create RequestBody instance from file
RequestBody requestFile =
RequestBody.create(
MediaType.parse(getContentResolver().getType(imageUri)),
file
);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
MultipartBody.Part.createFormData("file", file.getName(), requestFile);
Call<ResponseBody> call = service.upload(body);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.v("Upload", "success");
String resource = BASE_URL + "images/" + file.getName();
sendMessage(resource, recieverBareid);
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.v("Upload", "failed");
}
});
file=新文件(imagePath);
文件上传服务=
getRefundation().create(FileUploadService.class);
//从文件创建RequestBody实例
请求体请求文件=
RequestBody.create(
parse(getContentResolver().getType(imageUri)),
文件
);
//Part还用于发送实际的文件名
多部分主体。部分主体=
MultipartBody.Part.createFormData(“文件”,file.getName(),requestFile);
Call Call=服务上传(body);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.v(“上传”、“成功”);
String resource=BASE_URL+“images/”+file.getName();
sendMessage(资源,ReceiveBareId);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.v(“上传”、“失败”);
}
});
一旦获得图像uri,请检查此选项将其转换为base64为什么要将其转换为base64?它只会将您的数据大小增加到原始大小的133%—只需按原样上传—根本不需要base64—我如何按原样上传@pskinkusing-okhttp/reformation/任何其他类似库