我想上传捕获的图片图片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();
}
}
}
}
答案 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作为选项,我只是用它来指定我上传的图像的名称。