Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FireBase存储映像上载Android_Android_Firebase_Firebase Storage - Fatal编程技术网

FireBase存储映像上载Android

FireBase存储映像上载Android,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我创建了一个运行Firebase存储的应用程序。这样做的目的是从照片库中选择一幅图像,然后将其上载到Firebase存储。与Firebase的连接似乎工作正常,我可以选择图像。当我按下提交按钮将其上传到Firebase时,问题就出现了 当我点击它一次,什么也没发生 当我点击它几次,我得到一个消息,一个未知的错误发生,请检查HTTP结果代码和内部异常 我该怎么做,寻求建议 从舱单中: <uses-permission android:name="android.permission.READ

我创建了一个运行Firebase存储的应用程序。这样做的目的是从照片库中选择一幅图像,然后将其上载到Firebase存储。与Firebase的连接似乎工作正常,我可以选择图像。当我按下提交按钮将其上传到Firebase时,问题就出现了

当我点击它一次,什么也没发生

当我点击它几次,我得到一个消息,一个未知的错误发生,请检查HTTP结果代码和内部异常

我该怎么做,寻求建议

从舱单中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
从活动中:

public class PostActivity extends AppCompatActivity {

private static final int GALLERY_REQUEST = 2;
private Uri uri = null;
private ImageButton imageButton;
private EditText editName;
private EditText editDescription;
private StorageReference storageReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post);
    //reference the two edittext Views, initialize them
    editName = (EditText) findViewById(R.id.editName);
    editDescription = (EditText) findViewById(R.id.editDescription);

    //add the reference to the storagereference, initialize it
    storageReference = FirebaseStorage.getInstance().getReference();
}

public void ImageButtonClicked (View view){
    Intent galleryintent = new Intent (Intent.ACTION_GET_CONTENT);
    galleryintent.setType("Image/*");  
    startActivityForResult(galleryintent, GALLERY_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK){

uri = data.getData();
imageButton = (ImageButton) findViewById(R.id.imageButton);
imageButton.setImageURI(uri);
    }
}

public void submitButtonClicked (View view){

    String titleValue = editName.getText().toString().trim();
    String titleDescription = editDescription.getText().toString().trim();

    if (!TextUtils.isEmpty(titleValue) && !TextUtils.isEmpty(titleDescription)){

        StorageReference filePath = storageReference.child("PostImage").child(uri.getLastPathSegment());

        filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

Uri downloadurl = taskSnapshot.getDownloadUrl();
Toast.makeText(PostActivity.this,"uploadcomplete",Toast.LENGTH_LONG).show();

            }
        });
filePath.putFile(uri).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

       Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();

尝试此方法将图像上载到firebase存储:

private void uploadMethod() {
        progressDialog();
        FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
        StorageReference storageReferenceProfilePic = firebaseStorage.getReference();
        StorageReference imageRef = storageReferenceProfilePic.child("Your Path" + "/" + "Image Name" + ".jpg");

        imageRef.putFile(imageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        //if the upload is successful
                        //hiding the progress dialog
                        //and displaying a success toast
                        dismissDialog();
                        String profilePicUrl = taskSnapshot.getDownloadUrl().toString();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        //if the upload is not successful
                        //hiding the progress dialog
                        dismissDialog();
                        //and displaying error message
                        Toast.makeText(getActivity(), exception.getCause().getLocalizedMessage(), Toast.LENGTH_LONG).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        //calculating progress percentage
//                        double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
//                        //displaying percentage in progress dialog
//                        progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
                    }
                });

    }

要在firebase上执行图像上载,请使用以下方法:

void uploadFile(String pathToFile, String fileName, String serverFolder, String contentType) {
    if (pathToFile != null && !pathToFile.isEmpty()) {

        File file = new File(pathToFile);
        if (file.exists()) {

            Uri uri = Uri.fromFile(new File(pathToFile));

            // Create a storage reference from our app
            mStorageRef = mFirebaseStorage.getReference();

            // Create a reference to "mountains.jpg"
            //StorageReference mountainsRef = storageRef.child(fileName);

            // Create a reference to 'images/mountains.jpg'
            StorageReference mountainImagesRef = mStorageRef.child(serverFolder+"/" + fileName);
            StorageMetadata metadata = null;
            if (contentType != null && !contentType.isEmpty()) {
                // Create file metadata including the content type
                metadata = new StorageMetadata.Builder()
                        .setContentType(contentType)
                        .build();
            }


            if (metadata != null) {
                uploadFileTask = mountainImagesRef.putFile(uri, metadata);
            } else {
                uploadFileTask = mountainImagesRef.putFile(uri);
            }

            uploadFileTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle unsuccessful uploads
                    hideProgressDialog();
                    exception.printStackTrace();
                    Log.e(TAG,exception.getMessage());
                    if (firebaseUploadCallback!=null)
                    {
                        firebaseUploadCallback.onFirebaseUploadFailure(exception.getMessage());
                    }
                }
            });
            uploadFileTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                    hideProgressDialog();
                    Uri downloadUrl = taskSnapshot.getDownloadUrl();
                    Log.e(TAG, "Upload is success "+ downloadUrl);
                    if (firebaseUploadCallback!=null)
                    {
                        firebaseUploadCallback.onFirebaseUploadSuccess("Upload is success "+ downloadUrl.toString(), downloadUrl.toString());
                    }
                }
            });
            // Observe state change events such as progress, pause, and resume
            uploadFileTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                    hideProgressDialog();
                    double progressPercent = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                    progressPercent = Double.parseDouble(FirebaseUtil.formatDecimal(progressPercent,2));
                    Log.e(TAG, "File Upload is " + progressPercent + "% done");
                    if (firebaseUploadCallback!=null)
                    {
                        firebaseUploadCallback.onFirebaseUploadProgress(progressPercent);
                    }
                }
            });
            uploadFileTask.addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
                    hideProgressDialog();
                    Log.e(TAG, "Upload is paused");
                    if (firebaseUploadCallback!=null)
                    {
                        firebaseUploadCallback.onFirebaseUploadPaused("Upload is paused");
                    }
                }
            });
        }
        else
        {
            hideProgressDialog();
            Log.e(TAG, "Upload file does not exists");
            if (firebaseUploadCallback!=null)
            {
                firebaseUploadCallback.onFirebaseUploadFailure("Upload file does not exists");
            }
        }
    }else
    {
        hideProgressDialog();
        Log.e(TAG,"pathToFile cannot be null or empty");
        if (firebaseUploadCallback!=null)
        {
            firebaseUploadCallback.onFirebaseUploadFailure("pathToFile cannot be null or empty");
        }
    }
}
确保在使用上述代码之前检查规则。如果规则要求firebase身份验证,则首先完成当前用户的身份验证,然后开始上载文件


我希望这个答案能解决你的问题。

我通过Rahul Chandrabhan的密码找到了答案。 我所做的更改是删除以下方法的最后一部分:

StorageReference filePath = 
storageReference.child("PostImage").child(uri.getLastPathSegment());

TO 

StorageReference filePath = storageReference.child("PostImage");

在我的例子中,我在onActivityResult函数上获取的URI格式不正确。 以前我是这样解析的

uri=Uri.parse(your image path)
但换成这样之后,它就成功了

uri=Uri.fromFile(new File(your image path))
上传功能

public void upload()
    {
        if(uri!=null)
        {

            progressBar.setVisibility(View.VISIBLE);
            progressBar_tv.setVisibility(View.VISIBLE);
            Log.i("URI",uri.getPath());
            UploadTask uploadTask=sRef.putFile(uri);
            uploadTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(VideoEditAndUploadActivity.this, "Upload Failed:"+e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
                    e.printStackTrace();;
                }
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Toast.makeText(VideoEditAndUploadActivity.this, "Upload Successful!", Toast.LENGTH_SHORT).show();
                    progressBar.setVisibility(View.INVISIBLE);
                    progressBar_tv.setVisibility(View.INVISIBLE);
                }
            }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
                    updateUploadProgress(snapshot);
                }
            });
        }
        else{
            Toast.makeText(this, "Video Uri is null: please choose a video first!", Toast.LENGTH_SHORT).show();
        }
    }

看看这个例子。!您好,谢谢您的回复。我还没能测试你的回答,在下面我找到了一个使用与我类似代码的答案。所以我无法判断它是否有效。祝你成功!
public void upload()
    {
        if(uri!=null)
        {

            progressBar.setVisibility(View.VISIBLE);
            progressBar_tv.setVisibility(View.VISIBLE);
            Log.i("URI",uri.getPath());
            UploadTask uploadTask=sRef.putFile(uri);
            uploadTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(VideoEditAndUploadActivity.this, "Upload Failed:"+e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
                    e.printStackTrace();;
                }
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Toast.makeText(VideoEditAndUploadActivity.this, "Upload Successful!", Toast.LENGTH_SHORT).show();
                    progressBar.setVisibility(View.INVISIBLE);
                    progressBar_tv.setVisibility(View.INVISIBLE);
                }
            }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
                    updateUploadProgress(snapshot);
                }
            });
        }
        else{
            Toast.makeText(this, "Video Uri is null: please choose a video first!", Toast.LENGTH_SHORT).show();
        }
    }
@SuppressLint("DefaultLocale")
    private void updateUploadProgress(UploadTask.TaskSnapshot snapshot) {
        long fileSize=snapshot.getTotalByteCount();
        long uploadBytes=snapshot.getBytesTransferred();
        long progress=(100*uploadBytes)/fileSize;

        progressBar.setProgress((int) progress);
        progressBar_tv.setText(String.format("%d%%", progress));
    }