我正在尝试从Firabase数据库上传和下载图像,该数据库有一个指向Firebase存储的URL链接。问题是这个奇怪的URL正在被保存到数据库中(参见底部的链接)。我应该怎么做才能获得一个正常的URL,我可以使用do downloand将图像导入我的Android应用程序?提前谢谢!
这里我发布了一些我使用的代码:
上传至Firebase数据库和存储:
mStorageRef = FirebaseStorage.getInstance().getReference();
mDataBaseRef = FirebaseDatabase.getInstance().getReference();
if (mImageUri != null)
{
final StorageReference fileReference = mStorageRef.child(nameimage + "." + getFileExtension(mImageUri));
fileReference.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(AddAdvertisement.this, "Upload successful!", Toast.LENGTH_LONG).show();
Upload upload = new Upload(et_localization, taskSnapshot.getUploadSessionUri().toString());
String uploadId = mDataBaseRef.push().getKey();
mDataBaseRef.child(uploadId).setValue(upload);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(AddAdvertisement.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
并从Firebase下载:
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren())
{
Upload upload = postSnapshot.getValue(Upload.class);
mUploads.add(upload);
}
mAdapter = new AdverisementAdapter(getContext(),mUploads);
mrecyclerView.setAdapter(mAdapter);
}
和毕加索一起检索图像:
@Override
public void onBindViewHolder(@NonNull ImageViewHolder imageViewHolder, int i) {
Upload uploadCurrent = mUploads.get(i);
imageViewHolder.textViewName.setText(uploadCurrent.getName());
Picasso.get().load(uploadCurrent.getUrl()).into(imageViewHolder.imageView);
}
毕加索的作品很好,因为除了形成一个图像,我还从Firebase字符串中获得了一个名称,这是适当下载的。所以,我认为问题在于这个错误的url:
https://firebasestorage.googleapis.com/v0/b/my_name/o?name=image.jpg
当我试图进入这个链接时,我收到了这样的错误:
无效的请求。缺少X-Goog-Upload-Command头。
fileReference.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(AddAdvertisement.this, "Upload successful!", Toast.LENGTH_LONG).show();
fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
// just do your task //like hashmaps to put in
}
});
}
})
根据官方留档关于UploadTaskSnapshot的getUploadSessionUri()方法:
返回会话Uri,有效期约为一周,通过将此值传递到putFile(Uri,StorageMetadata,Uri)
中,可用于稍后恢复上载。
恐怕这不是您要找的Uri
。要获得正确的uri,请参阅我在本文中的答案。
您正在将此值写入数据库:
taskSnapshot.getUploadSessionUri().toString()
这是上传会话的URI,如果上传被中止,可以使用它来恢复上传。
因为你想存储下载URL,所以这个调用对你来说是毫无用处的。相反,您应该调用getDownloadUrl()
(异步)获取新上传文件的下载URL:
fileReference.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(AddAdvertisement.this, "Upload successful!", Toast.LENGTH_LONG).show();
fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String url = uri.toString();
Upload upload = new Upload(et_localization, url);
String uploadId = mDataBaseRef.push().getKey();
mDataBaseRef.child(uploadId).setValue(upload);
}
});
}
})...
请注意,在Firebase留档中对上传文件后获取下载URL进行了很好的描述,该事件包括通过使用继续与任务
而不是嵌套回调来完成相同操作的示例(我在上面做了)。
请问下uniapp打包成app怎么上传图片,可以用chooseImage上传图片吗,chooseImage是不是已经被淘汰了,新版的chooseMedia不支持
本文向大家介绍Yii+upload实现AJAX上传图片的方法,包括了Yii+upload实现AJAX上传图片的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii+upload实现AJAX上传图片的方法。分享给大家供大家参考,具体如下: 控制器代码: VIEW代码: 更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《sm
我用的uniapp中的uview想弄一个上传图片的功能 前端上传图片的代码: 后端用的buildadmin: 最后提示:Provisional headers are shown没有任何返回信息,但这接口在apifox里测试是没有问题的。 其中线索:上传时有这两个请求,有下面的提示。
定义 上传组件。 图片展示 代码演示 import Upload from 'pile/dist/components/upload' const { UploadImage, UploadImageArray } = Upload; // 单张图片上传 <UploadImage onLoadSuccess={(o) => { console.log(o); }} /> // 多张图片上传(默
Upload 上传 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 可以通过设置file-list参数(数组,元素为对象),显示预置的图片。其中元素的url属性为图片路径 设置action参数为后端服务器地址,注意H5在浏览器可能会有跨域限制,让后端允许域即可 <template> <u-upload :action
通过点击或者拖拽上传文件 点击上传 通过 slot 你可以传入自定义的上传按钮类型和文字提示。可通过设置limit和on-exceed来限制上传文件的个数和定义超出限制时的行为。可通过设置before-remove来阻止文件移除操作。 <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/po