【问题标题】:Android Firebase upload file timeAndroid Firebase 上传文件时间
【发布时间】:2016-07-20 16:07:34
【问题描述】:

您好,我正在 Firebase 中实现图像的存储上传。

我正在做的是从我的画廊中选择一张图片,然后将其显示在 ImageView 上,然后将其上传到存储中。

一切正常。但我担心的是我第一次上传图片时,我已经测试过了,大约需要一分钟才能返回下载路径。

第一次之后不到一秒钟。我的问题是我想在关闭“上传图片”活动后将该路径用于另一个 ImageViews。

这是我的代码。

我有一个选择画廊的对话框(稍后我会有 facebook 选项)

    private View.OnClickListener dialogListener = new View.OnClickListener() {

    @Override
    public void onClick(View view) { clicked.length());
        final Dialog dialog = new Dialog(EditProfileActivity.this);
        dialog.setContentView(R.layout.galleryoptions);
        dialog.setTitle("Gallery Options");

        Button gallery = (Button) dialog.findViewById(R.id.buttonGallery);
        gallery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
                Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(intent, RESULT_LOAD_IMAGE);
            }
        });

        dialog.show();
    }
};

那么这里是活动结果

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

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        //GET PATHS
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        Log.d(TAG, "PICTURE PATH IN PHONE: " + picturePath);
        cursor.close();
        clicked = "iv_"+clicked;
        int resID = getResources().getIdentifier(clicked, "id", "com.my.project");
        ImageView imageView = (ImageView) findViewById(resID);
        imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        //UPLOAD FILE TO FIREBASE
        Uri file  = Uri. fromFile(new File(picturePath));
        String extension = file.getLastPathSegment();
        extension = extension.substring(extension.lastIndexOf("."));
        StorageReference riversRef = storageRef.child("images/"+ user.getUid().toString()+"/"+clicked+extension);
        UploadTask uploadTask = riversRef.putFile(file);

        // Register observers to listen for when the download is done or if it fails
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
            }
        }).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.
                Uri downloadUrl = taskSnapshot.getDownloadUrl();
                Log.d(TAG, "DOWNLOAD PATH IN FIREBASE: " + downloadUrl);
            }
        });
    }


}

第一次日志“PATH IN PHONE”和“PATH IN FIREBASE”之间的时间大约是一分钟,然后很快。问题是,您是否知道一种方式、方法或模式可以一直快速上传,而不仅仅是第二次? 或者你有什么建议?使用实时数据库而不是存储将图像存储在 Base64 中更好吗?

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    Firebase 存储不受 App Engine 支持(它共享相同的默认 GCS 存储桶,但不在 GAE 上运行),但我可以理解为什么这可能会让您第一次认为它很慢。

    我认为可能发生的情况是,与服务器的底层连接在第一个实例之后被缓存,并且由于您的位置或类似问题可能会出现初始延迟。

    您能告诉我您所在的大致区域吗?
    此外,您能否验证如果您进行任何虚拟上传(到任何位置,包括不同的存储桶),那么速度会提高吗?

    【讨论】:

    • 嗨本杰明。我没有尝试除英国以外的任何其他地区。每次第一次上传持续大约 1 分钟,然后其他人几乎是瞬间。我最终实现的是包含一个进度对话框,显示上传过程中的进度。这是实现github.com/casertillo/AndroidProjects/blob/master/TutumpDev/app/… 这是从第 300 行开始的方法。希望它对你有用。
    【解决方案2】:

    您在首次上传时看到延迟的原因是因为 Firebase 由 Google App Engine 支持,当您的后端长时间不使用时,它基本上会处于暂停状态以节省资源。

    当您在此暂停状态下发出请求时,它需要重新启动所有内容,即您看到上传时间滞后

    【讨论】:

    • 有道理,您知道在这种情况下手动将状态从暂停更改为恢复 Firebase 后端的方法吗?我是 Firebase 的新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2020-07-14
    • 2021-12-02
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多