gpt4 book ai didi

java - 如何使用 Firebase 从实时数据库存储和检索图像 url?

转载 作者:行者123 更新时间:2023-11-30 05:00:55 25 4
gpt4 key购买 nike

我在将图像 url 存储到实时数据库时遇到了问题。它存储一个与存储中图像的 url 无关的 url。

private  void uploadFile (){
if (mImageUri != null){
StorageReference fileReference = mStorageRef.child(System.currentTimeMillis()
+ "." + getFileExtension(mImageUri));

uploadProgressBar.setVisibility(View.VISIBLE);
uploadProgressBar.setIndeterminate(true);

mUploadTask = fileReference.putFile(mImageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
uploadProgressBar.setVisibility(View.VISIBLE);
uploadProgressBar.setIndeterminate(false);
uploadProgressBar.setProgress(0);
}
},500);

Toast.makeText(AddProductActivity.this, "Product is added successfully!", Toast.LENGTH_SHORT).show();

Product product = new Product(productName.getText().toString()
,productDescription.getText().toString()
,price.getText().toString()
,taskSnapshot.getUploadSessionUri().toString()
,oldPrice.getText().toString()
, quantity.getText().toString());

String uploadID = mDatabaseRef.push().getKey();
mDatabaseRef.child(uploadID).setValue(product);


uploadProgressBar.setVisibility(View.INVISIBLE);
openMainActivity();

}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
uploadProgressBar.setVisibility(View.INVISIBLE);
Toast.makeText(AddProductActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 *taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
uploadProgressBar.setProgress((int) progress);


}
});
} else {
Toast.makeText(this, "You haven't Selected any file", Toast.LENGTH_SHORT).show();
}
}

当我从 imageUrl 字段复制存储的 url 并尝试查看它是否会显示图像时,我收到此文本错误:

Invalid request. X-Goog-Upload-Command header is missing.

最佳答案

您需要更改taskSnapshot.getUploadSessionUri().toString(),同时将图像上传到正确的uri,如下所示

下面是获取正确 URI 的示例

firebaseStorageReference.putFile(resultUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
final Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();

firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String mDownloadUri = uri.toString();
}
});

}
});

并将其应用到您的代码中

private  void uploadFile (){
if (mImageUri != null){
StorageReference fileReference = mStorageRef.child(System.currentTimeMillis()
+ "." + getFileExtension(mImageUri));

uploadProgressBar.setVisibility(View.VISIBLE);
uploadProgressBar.setIndeterminate(true);

mUploadTask = fileReference.putFile(mImageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
uploadProgressBar.setVisibility(View.VISIBLE);
uploadProgressBar.setIndeterminate(false);
uploadProgressBar.setProgress(0);
}
},500);


final Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();
firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String downloadUri = uri.toString();

Toast.makeText(AddProductActivity.this, "Product is added successfully!", Toast.LENGTH_SHORT).show();

Product product = new Product(productName.getText().toString()
,productDescription.getText().toString()
,price.getText().toString()
,downloadUri
,oldPrice.getText().toString()
, quantity.getText().toString());

String uploadID = mDatabaseRef.push().getKey();
mDatabaseRef.child(uploadID).setValue(product);

uploadProgressBar.setVisibility(View.INVISIBLE);
openMainActivity();

}
});
// rest of your code

希望对你有帮助,欢迎大家多多支持

关于java - 如何使用 Firebase 从实时数据库存储和检索图像 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com