![](/img/trans.png)
[英]How to copy an image over to another reference path in Firebase Storage?
[英]How to create another image path using Android Studio Firebase Cloud Storage
我目前正在尝试创建如下所示的 RegisterFarm 活动
我的问题是,当使用上传文件作为农场的证书和图像时,它会相互覆盖。 我想在创建 certificate.jpg 的地方创建另一个存储参考。 我不确定如何添加另一个上传。
我当前的代码:
public class RegisterFarm extends AppCompatActivity {
EditText farmname, hectares;
Button upload_title, upload_pic, submit;
FirebaseFirestore fStore;
StorageReference storageReference;
FirebaseAuth fAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_farm);
farmname = findViewById(R.id.input_farm_name);
hectares = findViewById(R.id.input_farm_hectares);
upload_title = findViewById(R.id.upload_btn1);
upload_pic = findViewById(R.id.upload_btn2);
submit = findViewById(R.id.upload_submit);
fStore = FirebaseFirestore.getInstance();
fAuth = FirebaseAuth.getInstance();
storageReference = FirebaseStorage.getInstance().getReference();
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String Farmname = farmname.getText().toString();
String Hectares = hectares.getText().toString();
Map<String,Object> farms = new HashMap<>();
farms.put("Farm Name", Farmname);
farms.put("Hectares", Hectares);
fStore.collection("Farms")
.add(farms)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(RegisterFarm.this, "Farm Registered.", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(RegisterFarm.this, "Upload Error", Toast.LENGTH_SHORT).show();
}
});
}
});
upload_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//open gallery
Intent opengallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(opengallery,1000);
}
});
upload_pic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//open gallery
Intent opengallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(opengallery,1000);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1000){
if(resultCode == Activity.RESULT_OK){
Uri imageUri = data.getData();
//profilepic.setImageURI(imageUri);
uploadImagetoFirebase(imageUri);
}
}
}
private void uploadImagetoFirebase(Uri imageUri) {
//upload Image to Firebase
StorageReference fileRef = storageReference.child("Farms/" +fAuth.getCurrentUser().getUid()+"/farm.jpg");
fileRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Toast.makeText(RegisterFarm.this, "Image Uploaded Successfully", Toast.LENGTH_SHORT).show();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(RegisterFarm.this, "Image Upload Failed", Toast.LENGTH_SHORT).show();
}
});
}
您正在将图片上传到 Cloud Storage 上的这个位置:
storageReference.child("Farms/" +fAuth.getCurrentUser().getUid()+"/farm.jpg");
由于您始终将文件命名为farm.jpg
,因此您最终得到的是您为该用户上传的最后一张图片。
如果您想为用户存储多张图片,则必须为他们上传的每个文件生成一些唯一的路径。 例如,您可以将当前时间戳添加到文件名中:
storageReference.child("Farms/" +fAuth.getCurrentUser().getUid()+"/farm_"+System.currentTimeMillis()+".jpg");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.