Firebase 存储 - 限制用户上传到 Firebase 存储的图像大小
Firebase storage - Limit size of image that users upload to firebase storage
我是一名新的 Firebase 开发人员。我正在开发一个 android 应用程序,允许用户将图像上传到 firebase 存储。因为我使用的是 Spark 模式,所以我只有 5Gb 的存储空间。
我想限制用户上传到 firebase 存储的图像大小。
下面是我用来将图像上传到 firebase 存储的代码。
Uri imageUri = Uri.parse(imagePath);
//need permistion android.permission.MANAGE_DOCUMENTS to upload file.
final StorageReference photoRef = mStorageRef.child(Constants.FIREBASE_LOCATION_IMAGE_EXAM).child(imageUri.getLastPathSegment());
taskStarted();
photoRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Log.d(TAG, "upload success");
mUploadExamTaskCount--;
examURLArray.add(new ExamPage(taskSnapshot.getDownloadUrl().toString()));
if (mUploadExamTaskCount == 0) {//upload files success.
/**
* update image link to database.
*/
DatabaseReference firebaseExamPage = FirebaseDatabase.getInstance().getReference(Constants.FIREBASE_LOCATION_EXAM_PAGE);
firebaseExamPage.child(examKey).setValue(examURLArray);
Log.d(TAG, "send upload exam success br");
Intent taskCompletedIntent = new Intent(ACTION_UPLOAD_EXAM_COMPLETED);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(taskCompletedIntent);
}
taskCompleted();
}
})
你知道如何解决这个问题吗?
根据 Firebase Storage Security Rules docs,您可以编写检查上传文件大小的规则:
service firebase.storage {
match /b/<bucket>/o {
match /files/{fileName} {
allow read;
allow write: if request.resource.size < 10 * 1024 * 1024; // 10MB limit for instance
}
}
}
使用 JS 在客户端调整大小
如果您的目标不一定是限制用户,而是要保持图片的尺寸较小,您最好使用JavaScript[=33=在客户端调整图片大小].
这对我们来说是完美的解决方案,节省了:
- Space 在我们的主机中,
- 托管费用 space、
- 访客在上传期间的时间(通常少 10 倍以上),
- 通过移动有限带宽上传时访问者的钱,
- 在尝试上传大照片时给访问者带来的问题和糟糕的体验,我们会限制其他解决方案
如果您有兴趣,可以关注 dcollien 的另一个答案,我们在其中调整大小:
从那个回答可以看出,使用方法很简单,要包含的脚本只有一个小的JS/ES6文件。
我相信这个人 (dcollien) 应该得到更多的评价,所以我建议您为他的答案和这个答案投票(以便其他人可以找到相关的答案)。
可能会迟到,但可以帮助另一个新手:-)
您可以通过这种方式减少使用字节的上传大小:
StorageReference fileToUpload = mStorage.child("xyz").child(x);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
photo.invalidate();
BitmapDrawable drawable = (BitmapDrawable) photo.getDrawable();
Bitmap imp = drawable.getBitmap();
imp.compress(Bitmap.CompressFormat.JPEG, 25, bao);
byte[] byteArray = bao.toByteArray();
UploadTask uploadTask = fileToUpload.putBytes(byteArray);
我是一名新的 Firebase 开发人员。我正在开发一个 android 应用程序,允许用户将图像上传到 firebase 存储。因为我使用的是 Spark 模式,所以我只有 5Gb 的存储空间。 我想限制用户上传到 firebase 存储的图像大小。 下面是我用来将图像上传到 firebase 存储的代码。
Uri imageUri = Uri.parse(imagePath);
//need permistion android.permission.MANAGE_DOCUMENTS to upload file.
final StorageReference photoRef = mStorageRef.child(Constants.FIREBASE_LOCATION_IMAGE_EXAM).child(imageUri.getLastPathSegment());
taskStarted();
photoRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Log.d(TAG, "upload success");
mUploadExamTaskCount--;
examURLArray.add(new ExamPage(taskSnapshot.getDownloadUrl().toString()));
if (mUploadExamTaskCount == 0) {//upload files success.
/**
* update image link to database.
*/
DatabaseReference firebaseExamPage = FirebaseDatabase.getInstance().getReference(Constants.FIREBASE_LOCATION_EXAM_PAGE);
firebaseExamPage.child(examKey).setValue(examURLArray);
Log.d(TAG, "send upload exam success br");
Intent taskCompletedIntent = new Intent(ACTION_UPLOAD_EXAM_COMPLETED);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(taskCompletedIntent);
}
taskCompleted();
}
})
你知道如何解决这个问题吗?
根据 Firebase Storage Security Rules docs,您可以编写检查上传文件大小的规则:
service firebase.storage {
match /b/<bucket>/o {
match /files/{fileName} {
allow read;
allow write: if request.resource.size < 10 * 1024 * 1024; // 10MB limit for instance
}
}
}
使用 JS 在客户端调整大小
如果您的目标不一定是限制用户,而是要保持图片的尺寸较小,您最好使用JavaScript[=33=在客户端调整图片大小].
这对我们来说是完美的解决方案,节省了:
- Space 在我们的主机中,
- 托管费用 space、
- 访客在上传期间的时间(通常少 10 倍以上),
- 通过移动有限带宽上传时访问者的钱,
- 在尝试上传大照片时给访问者带来的问题和糟糕的体验,我们会限制其他解决方案
如果您有兴趣,可以关注 dcollien 的另一个答案,我们在其中调整大小:
从那个回答可以看出,使用方法很简单,要包含的脚本只有一个小的JS/ES6文件。
我相信这个人 (dcollien) 应该得到更多的评价,所以我建议您为他的答案和这个答案投票(以便其他人可以找到相关的答案)。
可能会迟到,但可以帮助另一个新手:-) 您可以通过这种方式减少使用字节的上传大小:
StorageReference fileToUpload = mStorage.child("xyz").child(x);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
photo.invalidate();
BitmapDrawable drawable = (BitmapDrawable) photo.getDrawable();
Bitmap imp = drawable.getBitmap();
imp.compress(Bitmap.CompressFormat.JPEG, 25, bao);
byte[] byteArray = bao.toByteArray();
UploadTask uploadTask = fileToUpload.putBytes(byteArray);