mirror of
https://github.com/zhigang1992/react-native-firebase.git
synced 2026-04-11 19:38:07 +08:00
Returning null as downloadUrl in upload task (#1620)
solves: #1591 using the first solution: > 1. Still consider the invocation a success, providing downloadURL as null. Can some maintainer help me with the new test case? I need a file with permission to upload but not to download.
This commit is contained in:
committed by
Michael Diarmid
parent
6684d5e739
commit
bf3f5001a0
@@ -564,29 +564,20 @@ public class RNFirebaseStorage extends ReactContextBaseJavaModule {
|
||||
taskSnapshot
|
||||
.getStorage()
|
||||
.getDownloadUrl()
|
||||
.addOnFailureListener(new OnFailureListener() {
|
||||
@Override
|
||||
public void onFailure(@Nonnull Exception e) {
|
||||
int errorCode = ((StorageException) e).getErrorCode();
|
||||
if (errorCode == StorageException.ERROR_NOT_AUTHORIZED) {
|
||||
WritableMap resp = getRespAsMap(taskSnapshot, null);
|
||||
listener.onSuccess(resp);
|
||||
}
|
||||
}
|
||||
})
|
||||
.addOnSuccessListener(new OnSuccessListener<Uri>() {
|
||||
@Override
|
||||
public void onSuccess(Uri downloadUrl) {
|
||||
WritableMap resp = Arguments.createMap();
|
||||
|
||||
resp.putDouble("bytesTransferred", taskSnapshot.getBytesTransferred());
|
||||
resp.putString("downloadURL", downloadUrl.toString());
|
||||
|
||||
StorageMetadata d = taskSnapshot.getMetadata();
|
||||
if (d != null) {
|
||||
WritableMap metadata = getMetadataAsMap(d);
|
||||
resp.putMap("metadata", metadata);
|
||||
}
|
||||
|
||||
resp.putString(
|
||||
"ref",
|
||||
taskSnapshot
|
||||
.getStorage()
|
||||
.getPath()
|
||||
);
|
||||
resp.putString("state", RNFirebaseStorage.this.getTaskStatus(taskSnapshot.getTask()));
|
||||
resp.putDouble("totalBytes", taskSnapshot.getTotalByteCount());
|
||||
|
||||
WritableMap resp = getRespAsMap(taskSnapshot, downloadUrl.toString());
|
||||
listener.onSuccess(resp);
|
||||
}
|
||||
});
|
||||
@@ -595,6 +586,29 @@ public class RNFirebaseStorage extends ReactContextBaseJavaModule {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private WritableMap getRespAsMap(final UploadTask.TaskSnapshot taskSnapshot, final String downloadUrl) {
|
||||
WritableMap resp = Arguments.createMap();
|
||||
|
||||
resp.putDouble("bytesTransferred", taskSnapshot.getBytesTransferred());
|
||||
resp.putString("downloadURL", downloadUrl);
|
||||
|
||||
StorageMetadata d = taskSnapshot.getMetadata();
|
||||
if (d != null) {
|
||||
WritableMap metadata = getMetadataAsMap(d);
|
||||
resp.putMap("metadata", metadata);
|
||||
}
|
||||
|
||||
resp.putString(
|
||||
"ref",
|
||||
taskSnapshot
|
||||
.getStorage()
|
||||
.getPath()
|
||||
);
|
||||
resp.putString("state", RNFirebaseStorage.this.getTaskStatus(taskSnapshot.getTask()));
|
||||
resp.putDouble("totalBytes", taskSnapshot.getTotalByteCount());
|
||||
return resp;
|
||||
}
|
||||
/**
|
||||
* Converts storageMetadata into a map
|
||||
*
|
||||
|
||||
@@ -108,6 +108,22 @@ describe('storage()', () => {
|
||||
uploadTaskSnapshot.metadata.should.be.an.Object();
|
||||
uploadTaskSnapshot.downloadURL.should.be.a.String();
|
||||
});
|
||||
|
||||
it('uploads a file without read permission', async () => {
|
||||
const uploadTaskSnapshot = await firebase
|
||||
.storage()
|
||||
.ref('/writeOnly.jpeg')
|
||||
.putFile(
|
||||
`${firebase.storage.Native.DOCUMENT_DIRECTORY_PATH}/ok.jpeg`
|
||||
);
|
||||
|
||||
uploadTaskSnapshot.state.should.eql(firebase.storage.TaskState.SUCCESS);
|
||||
uploadTaskSnapshot.bytesTransferred.should.eql(
|
||||
uploadTaskSnapshot.totalBytes
|
||||
);
|
||||
uploadTaskSnapshot.metadata.should.be.an.Object();
|
||||
should.not.exist(uploadTaskSnapshot.downloadURL);
|
||||
});
|
||||
});
|
||||
|
||||
describe('on()', () => {
|
||||
|
||||
Reference in New Issue
Block a user