我想要的是在Firebase存储上保存mp3文件,然后将其传输到Android设备.Firebase上的所有教程都讨论了图像文件的上传和下载.
如果有任何其他云比Firebase更容易存储和流式传输音频,那么请建议.
我想将用户在我的应用中选择的照片发送到Firebase存储.我有一个简单的类属性_imageFile,其设置如下:
File _imageFile;
_getImage() async {
var fileName = await ImagePicker.pickImage();
setState(() {
_imageFile = fileName;
});
}
Run Code Online (Sandbox Code Playgroud)
之后,我发送照片与此代码:
final String rand1 = "${new Random().nextInt(10000)}";
final String rand2 = "${new Random().nextInt(10000)}";
final String rand3 = "${new Random().nextInt(10000)}";
final StorageReference ref = FirebaseStorage.instance.ref().child('${rand1}_${rand2}_${rand3}.jpg');
final StorageUploadTask uploadTask = ref.put(_imageFile);
final Uri downloadUrl = (await uploadTask.future).downloadUrl;
print(downloadUrl);
Run Code Online (Sandbox Code Playgroud)
问题是照片通常非常大.在上传之前,Flutter/Dart中是否有任何压缩和调整照片大小的方法?我很好,质量下降.
我正在尝试从我的移动混合应用程序(Ionic 3)向我的Heroku后端(Node.js)发送图片,并让后端将图片上传到Firebase存储,并将新上传的fil下载URL返回到移动应用程序.
请注意,我正在使用适用于Node.js的Firebase Admin SDK.
所以我将base64编码的图像发送到Heroku(我用在线base64解码器检查编码的字符串,它没关系),由以下函数处理:
const uploadPicture = function(base64, postId, uid) {
return new Promise((resolve, reject) => {
if (!base64 || !postId) {
reject("news.provider#uploadPicture - Could not upload picture because at least one param is missing.");
}
let bufferStream = new stream.PassThrough();
bufferStream.end(new Buffer.from(base64, 'base64'));
// Retrieve default storage bucket
let bucket = firebase.storage().bucket();
// Create a reference to the new image file
let file = bucket.file(`/news/${uid}_${postId}.jpg`);
bufferStream.pipe(file.createWriteStream({
metadata: {
contentType: 'image/jpeg'
}
}))
.on('error', error => {
reject(`news.provider#uploadPicture …Run Code Online (Sandbox Code Playgroud) node.js google-cloud-storage google-cloud-platform firebase-storage
我正在尝试创建一个将文件上传到 Firebase Storage 的 Vue Composable。
为此,我使用模块化 Firebase 9 版本。
但我当前的代码没有上传任何内容,而是返回此错误:FirebaseError: Firebase Storage: An unknown error occurred, please check the error payload for server response. (storage/unknown)
由于这个错误已经来自我的,console.log("ERROR", err);我不知道还能在哪里寻找解决方案。
我的代码是使用 TypeScript 实现的,以防万一。
import { projectStorage } from "@/firebase/config";
import { ref, watchEffect } from "vue";
import {
ref as storageRef,
uploadBytesResumable,
UploadTaskSnapshot,
UploadTask,
getDownloadURL,
StorageError,
} from "firebase/storage";
const useStorage: any = (file: File) => {
const error = ref<StorageError | null>(null);
const url = ref<string | null>(null); …Run Code Online (Sandbox Code Playgroud) 我的应用程序从今天开始正常工作。我已经在我的 Android Flutter 应用程序中包含了 Firebase Storage,之后它就可以工作了,今天我突然收到 AppCheck 错误。我没有在我们的项目中包含应用程序检查,或者没有在设置中强制执行。之后,我遵循初始化 appcheck 的官方文档: https: //firebase.flutter.dev/docs/app-check/usage。
这是我的 Kotlin MainActivity:
import android.os.Bundle
import com.google.firebase.FirebaseApp
import com.google.firebase.appcheck.FirebaseAppCheck
import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
import io.flutter.embedding.android.FlutterActivity
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
FirebaseApp.initializeApp(/*context=*/ this);
val firebaseAppCheck = FirebaseAppCheck.getInstance()
firebaseAppCheck.installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance())
super.onCreate(savedInstanceState)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 main():
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
await FirebaseAppCheck.instance.activate();
runApp(MyApp());
}
Run Code Online (Sandbox Code Playgroud)
我还将其添加到我的 app/build.gradle 中
dependencies {
implementation 'com.google.firebase:firebase-appcheck-debug:16.0.0-beta01'
}
Run Code Online (Sandbox Code Playgroud)
当我向 firebase 存储发出请求时,我希望控制台中出现类似以下内容:
D DebugAppCheckProvider:将此调试密码输入到您项目的 Firebase 控制台的允许列表中:123a4567-b89c-12d3-e456-789012345678
相反,我收到一个错误:
2021-11-21 18:11:51.442 2091-3452/com.sekspir.grind4gain W/ExponenentialBackoff: …Run Code Online (Sandbox Code Playgroud) 嘿,我需要帮助这个编码,我不知道发生了什么.它前几天正在工作.之后出现错误if let ur; = metaData?.downladURL()
func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
guard let uid = Auth.auth().currentUser?.uid else { return }
let storageRef = Storage.storage().reference().child("user/\(uid)")
guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return }
let metaData = StorageMetadata()
metaData.contentType = "image/jpg"
storageRef.putData(imageData, metadata: metaData) { metaData, error in
if error == nil, metaData != nil {
if let url = metaData?.downloadURL() {
completion(url)
} else {
completion(nil)
}
// success!
} else {
// failed
completion(nil)
} …Run Code Online (Sandbox Code Playgroud) 因此,新的Firebase支持使用Google Cloud Platform进行存储.
您可以images使用以下命令将文件上传到文件夹:
var uploadTask = storageRef.child('images').put(file, metadata);
Run Code Online (Sandbox Code Playgroud)
如果要images/user1234使用代码动态创建子文件夹,该怎么办?
官方样本没有显示如何执行此操作,也没有显示官方指南或参考文档.
Firebase控制台是唯一可以手动创建文件夹的位置吗?
当我删除Firebase数据库中的帖子时,我希望云功能相应地删除firebase存储中的帖子缩略图.我的问题是,当我试图删除缩略图时,我认为我没有正确找到图像文件.
这是我尝试过的:
const functions = require('firebase-functions')
const admin = require('firebase-admin')
const gcs = require('@google-cloud/storage')()
exports.deletePost = functions.database.ref('Posts/{pushId}').onWrite(event => {
const original = event.data.val()
const previous = event.data.previous.val()
const pushId = event.params.pushId
if (original === null)
return
const filePath = 'Posts/' + pushId + 'thumbnail.jpg'
const bucket = gcs.bucket('postsapp-12312')
const file = bucket.file(filePath)
const pr = file.delete()
return pr
});
Run Code Online (Sandbox Code Playgroud)
这就是我在日志中得到的
ApiError:找不到Object.handleResp上的Object.parseHttpRespBody(/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/src/util.js:192:30)(/ user_code/node_modules/@ google-cloud/storage/node_modules/@ google-cloud/common/src/util.js:132:18)at/user_code/node_modules/@ google-cloud/storage/node_modules/@ google-cloud/common/src /来自Request.self.callback的Request.inResponse [as _callback](/user_code/node_modules/@google-cloud/storage/node_modules/retry-request/index.js:120:7)的util.js:465:12(/ user_code/node_modules/@google-cloud/storage/node_modules/request/request.js:188:22)在requestTmit(events.js:191:7)的emitTwo(events.js:106:13)处.(/user_code/node_modules/@google-cloud/storage/node_modules/request/request.js:1171:10)在emit.ene(events.js:96:13)的Request.emit(events.js:188:7)
在我的新的android firebase项目中,我使用了com.google.firebase:firebase-storage:16.0.1库.
我收到以下错误:
我打开了一个项目,有库firebase-storage:15.0.2和taskSnapshot.getDownloadUrl();其合作上项目.但在使用最新的依赖库后,它无法正常工作.
现在,我该如何获取文件URL?
有没有办法获得文件下载链接?
提前致谢!
今天,当我尝试更新我的 firebase 存储规则时,我收到了一条关于升级它们的消息。我怎么做?
i deploying storage
i firebase.storage: checking storage.rules for compilation errors...
? [W] undefined:undefined - Ruleset uses old version (version [1]). Please update to the latest version (version [2]).
? firebase.storage: rules file storage.rules compiled successfully
i storage: uploading rules storage.rules...
? storage: released rules storage.rules to firebase.storage
Run Code Online (Sandbox Code Playgroud)
我的规则是这样的:
service firebase.storage {
match /b/{bucket}/o {
match /user-files/{uid}/{allPaths=**} {
allow read: if resource.metadata[request.auth.uid] == "1"; // the uploading user can get a downloadURL
allow create, update: if request.auth.uid == …Run Code Online (Sandbox Code Playgroud) firebase-storage ×10
firebase ×7
android ×2
dart ×2
flutter ×2
node.js ×2
java ×1
javascript ×1
swift ×1
typescript ×1
vue.js ×1