您好我正在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);
}
});
}
}
两个日志之间的时间和#34; PATH IN PHONE&#34;和#34;消防局的路径&#34;第一次约一分钟,然后很快。问题是,您是否知道一种方法或方法或模式可以一直上传速度而不仅仅是第二次? 或者你的建议是什么?是使用实时数据库而不是存储来更好地将图像存储在Base64中?
答案 0 :(得分:1)
Firebase存储不受App Engine支持(它共享相同的默认GCS存储桶,但不会在GAE上运行)但我可以理解为什么这可能会让您认为它第一次变慢。
我认为可能发生的事情是服务器的基础连接在第一个实例之后被缓存,并且由于您的位置或类似问题,可能会出现初始延迟。
您能告诉我您所在的一般地区吗? 此外,您是否可以验证如果您进行任何虚拟上传(到任何位置,包括不同的存储桶),那么速度会提高吗?
答案 1 :(得分:-1)
您看到第一次上传延迟的原因是Firebase由Google App Engine
支持,当您的后端长时间未使用时,基本上会将其置于暂停状态以节省资源。< / p>
当你处于暂停状态时发出请求时,它需要重新启动当你看到上传时间滞后时的所有内容