如何将mp3文件发送到Firebase

时间:2019-07-01 10:05:59

标签: java android firebase

我想将mp3文件发送到Firebase存储,但是我的代码无法正常工作。我没有错。只是不起作用。

我要将从手机中选择的声音文件上传到Firebase存储。

这是我的代码:

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RQS_OPEN_AUDIO_MP3 && resultCode == Activity.RESULT_OK) {
        if ((data != null) && (data.getData() != null)) {
            Uri mp3FileUri = data.getData();

            Toast.makeText(sesyolla.this, "OKAY", Toast.LENGTH_SHORT).show();

            info.setText(mp3FileUri.getPath());
        }

    }
}


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

        fileReference.putFile(mp3FileUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                if (!task.isSuccessful()) {
                    throw task.getException();
                }
                return fileReference.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    Log.e(TAG, "then: " + downloadUri.toString());


                    Upload upload = new Upload(edittext.getText().toString().trim(),
                            downloadUri.toString());

                    mDatabaseRef.push().setValue(upload);
                } else {
                    Toast.makeText(sesyolla.this, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
        });
    }


}

1 个答案:

答案 0 :(得分:1)

完整解决方案:

CloudStorageDatabaseUtils.java

 public class CloudStorageDatabaseUtils {

        public void uploadImage(String storageChildAndPath, File file) {

            Uri uriFile = Uri.fromFile(file);

            StorageReference storageRef = FirebaseStorage.getInstance().getReference();
            final StorageReference ref = storageRef.child(storageChildAndPath);

            ref.putFile(uriFile);

        }

        public void getDownloadURL(String path, UrlReceiver receiver) {

            StorageReference reference = FirebaseStorage.getInstance().getReference().child(path);

            reference.getDownloadUrl().addOnSuccessListener(uri -> receiver.onUrlReceived(uri.toString()));
        }
    }

activity_upload_image.xml 只是一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <Button
            android:id="@+id/button_upload"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/action_upload_an_image"/>

</LinearLayout>

UrlReceiver.java

public interface UrlReceiver {
    /**
     * @param url URL which will be received
     */
    void onUrlReceived(String url);
}

UploadImageActivity.java

public class UploadImageActivity extends AppCompatActivity implements View.OnClickListener, UrlReceiver {

    CloudStorageDatabaseUtils databaseUtils = new CloudStorageDatabaseUtils();
    String downloadUrl;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload_image);
        Button upload = findViewById(R.id.button_upload);

        upload.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_upload:
                File rootStorage = Environment.getExternalStorageDirectory();
                File exactlyFile = new File(rootStorage.toString() + "/download/q1.jpeg");//or whatever

                databaseUtils.uploadImage("/example1/" + exactlyFile.getName(), exactlyFile);
                databaseUtils.getDownloadURL("/example1/" + exactlyFile.getName(), this);

        }
    }

    @Override
    public void onUrlReceived(String url) {
        if (url != null) {
            downloadUrl = url;
            Log.d("MyS", "url: " + url);
        }
    }
}