用Android写上传图片代码
时间: 2024-01-30 10:01:46 浏览: 22
为了上传图片,我们可以使用以下代码:
```java
private void uploadImage(Uri imageUri) {
//创建上传的文件对象
File imageFile = new File(getRealPathFromURI(imageUri));
//获取文件名和文件类型
String fileName = imageFile.getName();
String fileType = getMimeType(imageUri);
//创建上传任务
UploadTask uploadTask = mStorageRef.child("images/" + fileName).putFile(imageUri);
//监听上传进度
uploadTask.addOnProgressListener(taskSnapshot -> {
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
Log.d(TAG, "Upload is " + progress + "% done");
});
//监听上传完成事件
uploadTask.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Toast.makeText(this, "上传完成!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "上传失败!", Toast.LENGTH_SHORT).show();
}
});
}
//获取文件真实路径
private String getRealPathFromURI(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
//获取文件类型
private String getMimeType(Uri uri) {
String mimeType = null;
if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
ContentResolver cr = getContentResolver();
mimeType = cr.getType(uri);
} else {
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
.toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
fileExtension.toLowerCase());
}
return mimeType;
}
```
需要注意的是,这只是一个简单的上传图片的示例代码,实际上涉及到的细节还有很多。同时,还需要自己创建Firebase Storage实例并获取一个StorageReference对象来使用这段代码。