繁体   English   中英

如何使用 Android Studio Firebase Cloud 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM