Java 无法从firebase存储中提取文件
我无法从firebase存储中获取上传的图像文件,因为数据库将url存储在一个公共的不可使用的url表单中,而且我似乎一辈子都不知道我的代码有什么问题。请帮忙Java 无法从firebase存储中提取文件,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我无法从firebase存储中获取上传的图像文件,因为数据库将url存储在一个公共的不可使用的url表单中,而且我似乎一辈子都不知道我的代码有什么问题。请帮忙 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == GALLERY_PICK && resultCode == RESULT_OK){
Uri imageUri = data.getData();
CropImage.activity(imageUri)
.setAspectRatio(1,1)
.start(this);
//Toast.makeText(SettingsActivity.this, imageUri, Toast.LENGTH_LONG).show();
}
if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if(resultCode == RESULT_OK){
mProgressDialog = new ProgressDialog(SettingsActivity.this);
mProgressDialog.setTitle("Uploading");
mProgressDialog.setMessage("Please Wait While The Image Is Being Uploaded");
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
Uri resultUri = result.getUri();
String current_user_id = mCurrentUser.getUid();
StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + ".jpg");
filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()){
final String download_url = task.getResult().getMetadata().getReference().getDownloadUrl().toString();
mUserDatabase.child("image").setValue(download_url).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
mProgressDialog.dismiss();
Toast.makeText(SettingsActivity.this, "Uploaded Successfully", Toast.LENGTH_LONG).show();
}
}
});
} else {
Toast.makeText(SettingsActivity.this, "Error", Toast.LENGTH_LONG).show();
mProgressDialog.dismiss();
}
}
});
} else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
Exception error = result.getError();
}
}
}
@覆盖
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==GALLERY\u PICK&&resultCode==RESULT\u OK){
Uri imageUri=data.getData();
CropImage.activity(imageUri)
.setAspectRatio(1,1)
.启动(本);
//Toast.makeText(SettingsActivity.this、imageUri、Toast.LENGTH_LONG.show();
}
if(requestCode==CropImage.CROP\u IMAGE\u ACTIVITY\u REQUEST\u CODE){
CropImage.ActivityResult结果=CropImage.getActivityResult(数据);
if(resultCode==RESULT\u OK){
mProgressDialog=新建进度对话框(设置活动。this);
mProgressDialog.setTitle(“上传”);
mProgressDialog.setMessage(“正在上载图像,请稍候”);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
Uri resultUri=result.getUri();
字符串current_user_id=mCurrentUser.getUid();
StorageReference filepath=mImageStorage.child(“profile_images”).child(当前_用户_id+“.jpg”);
filepath.putFile(resultUri).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
最后一个字符串download_url=task.getResult().getMetadata().getReference().getDownloadUrl().toString();
mUserDatabase.child(“image”).setValue(下载url).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
mProgressDialog.disclose();
Toast.makeText(SettingsActivity.this,“上载成功”,Toast.LENGTH_LONG.show();
}
}
});
}否则{
Toast.makeText(SettingsActivity.this,“Error”,Toast.LENGTH_LONG.show();
mProgressDialog.disclose();
}
}
});
}else if(resultCode==CropImage.CROP\u IMAGE\u ACTIVITY\u RESULT\u ERROR\u CODE){
异常错误=result.getError();
}
}
}
在过去的5天里,我一直在关注这个问题,非常感谢您的帮助。首先,您可以在位图流中转换您的图像,然后您可以将其上载到firebase存储中,还可以轻松获得可下载的链接。您可以执行以下类似操作:
StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + ".jpg");
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,40,baos);
byte[] byt = baos.toByteArray();
UploadTask uploadTask = filepath.putBytes(byt);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
TastyToast.makeText(getApplicationContext(),"Error:"+e.getMessage(),TastyToast.LENGTH_LONG,
TastyToast.ERROR).show();
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
if(taskSnapshot.getMetadata() != null){
Task<Uri> result = taskSnapshot.getStorage().getDownloadUrl();
result.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
downloadUrl = Uri.parse(uri.toString());
// In downloadUri variable you will get your
image downloadable link
}
});
}
}
});
StorageReference filepath=mImageStorage.child(“profile_images”).child(当前_用户_id+”.jpg);
位图Bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
压缩(bitmap.CompressFormat.JPEG,40,baos);
byte[]byt=bas.toByteArray();
UploadTask UploadTask=filepath.putBytes(byt);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
TastyToast.makeText(getApplicationContext(),“错误:+e.getMessage(),TastyToast.LENGTH_LONG,
TastyToast.ERROR).show();
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
如果(taskSnapshot.getMetadata()!=null){
任务结果=taskSnapshot.getStorage().getDownloadUrl();
result.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(Uri){
downloadUrl=Uri.parse(Uri.toString());
//在downloadUri变量中,您将获得
图像下载链接
}
});
}
}
});
谢谢谢谢您的回复。我会让你知道它是否有效。你介意在我的github上检查整个代码吗?我还是很难弄清楚,抱歉。好了。上面代码中的java文件是SettingsActivity.java您遇到了什么错误,您是否尝试过我的代码。主要错误是url在数据库中的存储方式,因此当我尝试获取它时,它无法执行此操作。图像url以com.google.android.gms.tasks的形式存储在数据库中。zzu@e4bfb58. 只要url是以这种形式存储的,我就不可能获取它。我需要将其存储在firebase存储中上载的图像的实际下载url的起始位置