将捕获的图像上传到android中的cloudinary

时间:2015-03-20 23:33:17

标签: android camera inputstream image-uploading cloudinary

  

我想上传捕获的图片图片cloudinary我在此声明中有错误:

                cloudinary.uploader().upload(is, Cloudinary.emptyMap());
  

java.lang.NoClassDefFoundError:org.apache.commons.lang.StringUtils

     

我想问一下我应该通过什么来定义pic的名称

     

首先我获取uri并将其转换为字符串以获取路径   然后将此真实路径转换为InputStream   所以,我可以将它传递给cloudinary上传声明

 private static final int CAMERA_REQUEST = 1888;
private ImageView imageView;
TextView tv;
String s="aa";
Map config = new HashMap();
Cloudinary cloudinary;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera);
    config.put("cloud_name", "dkepfkeuu");
    config.put("api_key", "key");
    config.put("api_secret", "secret");
    cloudinary = new Cloudinary(config);
    tv=(TextView)findViewById(R.id.textView);
     this.imageView = (ImageView)this.findViewById(R.id.imageView1);
    Button photoButton = (Button) this.findViewById(R.id.button1);
    photoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        }
    });
}
Bitmap photo;
InputStream is;
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
        photo = (Bitmap) data.getExtras().get("data");
        imageView.setImageBitmap(photo);
        s= data.getDataString();

        Toast.makeText(this, "Image saved to:\n" +
                data.getData(), Toast.LENGTH_LONG).show();
        Uri uripath= data.getData();
        String uri = getRealPathFromURI( uripath);
        try {
             is = new FileInputStream(uri);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        Toast.makeText(this, "uri:\n" +
                uri, Toast.LENGTH_LONG).show();
        tv.setText(s+"---"+uri);
        try {
            cloudinary.uploader().upload(is, Cloudinary.emptyMap());
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}
public String getRealPathFromURI(Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = { MediaStore.Images.Media.DATA };
        cursor =getContentResolver().query(contentUri,  proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

}

1 个答案:

答案 0 :(得分:3)

您不需要将Uri转换为字符串,我在上传代码中执行以下操作:

InputStream in = getContentResolver().openInputStream(profileImageUri);
CloudinaryClient.upload(in, profileImageName);

CloudinaryClient:

public static void upload(final InputStream inputStream, final String publicId) {

    final Map<String, String> options = new HashMap<>();
    options.put("public_id", publicId);

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            try {
                cloudinary.uploader().upload(inputStream, options);
            } catch (IOException e) {
                //TODO: better error handling when image uploading fails
                e.printStackTrace();
            }
        }
    };

    new Thread(runnable).start();
}

注意:你可以传递null作为选项,我只是用它来指定我上传的图像的名称。