android - 在 Firebase 中上传多个图像
问题描述
我正在尝试使用 for 循环上传多个图像。我已经把我所有的文件都放在了一个列表中,在完成任务时,只有最后一张图片被上传了几次。
如果我要上传五张图片,那么最后一张图片将上传五次。
我也尝试将所有任务添加到列表中并循环它。但仍然只有最后一张图片被上传。
foreach(imgurl){
final StorageReference storageReference = mStorageReference.child("/photos" + "/photo" + (count + 1));
UploadTask uploadTask = storageReference.putFile(imgUrl);
Task<Uri> urlTask = uploadTask.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 storageReference.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
addPhoto(downloadUri.toString());
} else {
Log.d(TAG, "onFailure: Photo upload failed.");
Toast.makeText(mContext, "Photo upload failed ", Toast.LENGTH_SHORT).show();
}
}
});
}
}
解决方案
如果您有 5 张图片,那 5 张图片应该包含不同的 imgUrl,您将使用相同的 uploadTask 迭代 N 次上传代码到 Firebase 存储
UploadTask uploadTask = storageReference.putFile(imgUrl); --> This same task
tasks.add(uploadTask);
for (UploadTask str : tasks) { --> is repeating N times with the same imgUrl
Task<Uri> urlTask = str.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
...
例如,您应该做的是移动您的 forEach 循环以处理每个不同的 imgUrl,然后将每个循环上传到您的存储中
伪代码
forEach(imgUrl) {
uploadtask = storageReference.putFile(imgUrl);
tasks.add(uploadTask);
Task<Uri> urlTask = str.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
...
推荐阅读
- flutter - 如何在流到达 StreamBuilder 之前对其进行转换?
- reactjs - 使用来自组件和 Math.floor 的变量的数组长度无效
- spring-bean - 将 BeanUtils 方法创建为 Java Bean 的问题
- java - java.lang.AssertionError 试图测试一个 INSERT 语句是否执行成功
- r - 将列表列表中的项目分配为数据框的列名
- python - 带有 numba 和 @guvectorize 的“签名中的错误令牌”
- postgresql - 通过运行 ANALYZE 来提高查询性能?
- ios - 如何在自定义视图中创建更改属性的修饰符
- swift - SwiftUI Simple ForEach 多次报错不符合View
- python - Python Pip 未将包安装到虚拟环境 Visual Studio for Mac 中的正确目录中 - “未解决的导入”