Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从相机和文件中获取base64string并将其发布到服务器?_Java_Android_Base64_Android Camera_Android Bitmap - Fatal编程技术网

Java 如何从相机和文件中获取base64string并将其发布到服务器?

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

我正在尝试将图像位图转换为base64string以将其发布到服务器,但它无法工作。它只是加载了很长时间,然后失败了

这是我在ActivityResult上的代码

@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/任何其他类似库