media
firebase
uploadFile
方法中,我正在FirebaseStorage
上传媒体,并在获得成功回复后downloadUrl = taskSnapshot.getDownloadUrl()
发送给FirebaseDatabase
url
但无法download
媒体
url
private void uploadFile(Uri uri) {
StorageReference uploadStorageReference = mStorageReferenceMedia.child(uri.getLastPathSegment());
final UploadTask uploadTask = uploadStorageReference.putFile(uri);
showHorizontalProgressDialog("Uploading", "Please wait...");
uploadTask
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
hideProgressDialog();
downloadUrl = taskSnapshot.getDownloadUrl();
Log.e("MainActivity"+"241>>>>", downloadUrl.toString());
Toast.makeText(ActivityChatView.this, "ulr>>"+downloadUrl, Toast.LENGTH_SHORT).show();
sendURL();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
exception.printStackTrace();
// Handle unsuccessful uploads
hideProgressDialog();
}
})
.addOnProgressListener(ActivityChatView.this, new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
int progress = (int) (100 * (float) taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
Log.e("Progress>>", progress + "");
updateProgress(progress);
}
});
}
答案 0 :(得分:0)
比AsyncTask和HttpURLConnection组合我建议使用DownloadManager 作为正确的方法,并且可以从文档
继续从中断的地方下载下载管理器是一个处理长时间运行的系统服务 HTTP下载。客户端可以请求将URI下载到a 特定目标文件。下载管理器将执行 在后台下载,负责HTTP交互和 在故障或连接更改后重试下载 系统重启。
请参阅此example。 为了进一步帮助您进行调试,请考虑这个
1)请确保通过验证将URL实际上传到数据库中,并在下载过程中根据此情况给出适当的扩展名称。
2)物理打开文件位置以查看文件是否至少创建并使用正确的文件扩展名(如.mp3或.txt)。
3)你取决于从db获得的名称是否适用于扩展,
答案 1 :(得分:0)
您应该将 StorageReference 用于download file from Firebase Storage。
从网址下载文件
// Create a storage reference from our app
StorageReference storageRef = storage.getReference();
// Create a reference to a file from a Google Cloud Storage URI
StorageReference gsReference =
storage.getReferenceFromUrl("gs://bucket/images/stars.jpg");
//Download file in Memory
StorageReference islandRef = storageRef.child("images/island.jpg");
final long ONE_MEGABYTE = 1024 * 1024;
islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new
OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
// Data for "images/island.jpg" is returns, use this as needed
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
阅读this了解更多详情和其他下载文件的选项。
阅读this上传文件。