отправка хранилища в firebase downloadURL в firebase облачное хранилище - PullRequest
2 голосов
/ 04 июля 2019

есть идеи насчет передачи ссылки на скачивание URL из хранилища Firebase в облачный документ FireStore? У меня есть проект, который может загружать PDF-файлы в хранилище FireStore, но я не могу отправить URL загрузки загруженных файлов в облако FireStore.

// Мне нужно перехватить URL для загрузки каждого отдельного файла и отправить его в документ в пожарном хранилище, чтобы иметь возможность его загрузить, я загружаю и скачиваю файлы PDF.

мои коды: -

package com.example.boc;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import java.util.Objects;

public class pdfUploader extends AppCompatActivity {
    private StorageReference mStorageRef;
    Button upload;
    Button select;
    int CODE=215;
    private CollectionReference dbFirestore;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdf_uploader);

        mStorageRef = FirebaseStorage.getInstance().getReference();



        upload=findViewById(R.id.upload);
        select=findViewById(R.id.choose);

        select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectFile();
            }
        });

    }

    public void selectFile ()
    {

        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.setType("*/*");
        startActivityForResult(Intent.createChooser(i,"Select a file"), CODE);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        String filePath = data.getDataString();
        Uri SelectedFileLocation=Uri.parse(filePath);
        UploadFile(SelectedFileLocation);

        super.onActivityResult(requestCode, resultCode, data);

    }





    public  void UploadFile( Uri file)
    {
        Toast.makeText(this, "Please wait.. the file is uploading!", Toast.LENGTH_SHORT).show();
        //Uri file = Uri.fromFile(new File("path/to/images/rivers.jpg"));
        StorageReference riversRef = mStorageRef.child( Objects.requireNonNull( file.getLastPathSegment() ) );


        riversRef.putFile(file)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        Toast.makeText(pdfUploader.this, "Upload Success", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        Toast.makeText(pdfUploader.this, "Upload Failed", Toast.LENGTH_SHORT).show();

                    }
                });
    }
}

1 Ответ

4 голосов
/ 04 июля 2019

Назначить эту переменную сверху

FirebaseFirestore db;

//In oncreateView we have to assign now db so.
db = FirebaseFirestore.getInstance();

Код для получения файла uri:

riversRef.putFile(File).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
    {
        riversRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Uri downloadUrl = uri;
                    Toast.makeText(MtActivity.this, "Upload Done", Toast.LENGTH_LONG).show();   
                    //After upload Complete we have to store the Data to firestore.
                    Map<String, Object> file = new HashMap<>();
                    file.put("url", downloadUrl.toString()); // We are using it as String because our data type in Firestore will be String
                    db.collection("/*Put you're collection name*/").document("/*And Document name Here*/")
                            .set(file)
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    Log.d(TAG, "DocumentSnapshot successfully written!");
                                }
                            })
                            .addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    Log.w(TAG, "Error writing document", e);
                                }
                            });
                }
    }
});

Если срок загрузки URL истекает, есть лучший способ сохранить ваш файл изображения в вашем хранилище и хранилище

Код:

riversRef.putFile(file)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        String path = //Put path of storage it will be something like [images/filename.jpg(Put your extension of file)] this path from firebase storage
                        Map<String, Object> file = new HashMap<>();
                        file.put("url", path); // We are using it as String because our data type in Firestore will be String
                        db.collection("/*Put you're collection name*/").document("/*And Document id Here*/")
                                .set(file)
                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        Log.d(TAG, "DocumentSnapshot successfully written!");
                                    }
                                })
                                .addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Log.w(TAG, "Error writing document", e);
                                    }
                                });
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        Toast.makeText(pdfUploader.this, "Upload Failed", Toast.LENGTH_SHORT).show();

                    }
                });

приведенный выше код будет полезен и эффективнее, когда вы имеете дело с изображениями и читаете эту документацию для получения более подробной информации

...