我试图得到一个1分钟的视频上传到firebase桶存储使用管理SDK的进度。我见过很多关于使用firebase.storage().ref.child....但我无法做到这一点与管理sdk,因为他们没有相同的功能。这是我的文件上传:
exports.uploadMedia = (req, res) => {
const BusBoy = require('busboy');
const path = require('path');
const os = require('os');
const fs = require('fs');
const busboy = new BusBoy({ headers: req.headers, limits: { files: 1, fileSize: 200000000 } });
let mediaFileName;
let mediaToBeUploaded = {};
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
if(mimetype !== 'image/jpeg' && mimetype !== 'image/png' && mimetype !== 'video/quicktime' && mimetype !== 'video/mp4') {
console.log(mimetype);
return res.status(400).json({ error: 'Wrong file type submitted, only .png, .jpeg, .mov, and .mp4 files allowed'})
}
// my.image.png
const imageExtension = filename.split('.')[filename.split('.').length - 1];
//43523451452345231234.png
mediaFileName = `${Math.round(Math.random()*100000000000)}.${imageExtension}`;
const filepath = path.join(os.tmpdir(), mediaFileName);
mediaToBeUploaded = { filepath, mimetype };
file.pipe(fs.createWriteStream(filepath));
file.on('limit', function(){
fs.unlink(filepath, function(){
return res.json({'Error': 'Max file size is 200 Mb, file size too large'});
});
});
});
busboy.on('finish', () => {
admin
.storage()
.bucket()
.upload(mediaToBeUploaded.filepath, {
resumable: false,
metadata: {
metadata: {
contentType: mediaToBeUploaded.mimetype
}
}
})
.then(() => {
const meadiaUrl = `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${mediaFileName}?alt=media`;
return res.json({mediaUrl: meadiaUrl});
})
.catch((err) => {
console.error(err);
return res.json({'Error': 'Error uploading media'});
});
});
req.pipe(busboy);
}
这个方法现在还可以,但唯一的问题是用户不能看到他们的1或2分钟视频上传的位置。目前,它只是一个活动指示器,用户只是坐着等待,没有任何通知。如果有帮助的话,我会在前端使用react native。如有任何帮助,不胜感激!
我可以在客户端更容易地实现...但它与图像和视频上传进度完美地工作。在后端,我使用的是管理sdk,但前端我最初使用的是firebase sdk。
this.uploadingMedia = true;
const imageExtension = this.mediaFile.split('.')[this.mediaFile.split('.').length - 1];
const mediaFileName = `${Math.round(Math.random()*100000000000)}.${imageExtension}`;
const response = await fetch(this.mediaFile);
const blob = await response.blob();
const storageRef = storage.ref(`${mediaFileName}`).put(blob);
storageRef.on(`state_changed`,snapshot=>{
this.uploadProgress = (snapshot.bytesTransferred/snapshot.totalBytes);
}, error=>{
this.error = error.message;
this.submitting = false;
this.uploadingMedia = false;
return;
},
async () => {
storageRef.snapshot.ref.getDownloadURL().then(async (url)=>{
imageUrl = [];
videoUrl = [url];
this.uploadingMedia = false;
this.submitPost(imageUrl, videoUrl);
});
});
Firebase Admin SDK文档清楚地说明,服务帐户对存储帐户具有完全的范围控制,但由于传输令牌源为nil,因此正确引导凭据似乎有些错误。
我使用firebase-admin和firebase-functions在Firebase存储中上传文件。 我在仓库里有这样的规则:
当 Django 处理文件上传时,文件数据最终放置在 request.FILES 中(有关 request 对象的更多信息,请参阅请求和响应对象的文档)。本文档介绍了文件如何存储在磁盘和内存中,以及如何自定义默认行为。 !> 警告:如果您接受来自不可信用户的上传内容,则存在安全风险!有关缓解详细信息,请参阅用户上传内容中的安全指南主题。 基本文件上传 考虑一个包含 FileField 的简单表单:
问题内容: 我正在尝试从远程Firebase服务器获取文件。 但是,如果我在浏览器中打开,则会加载json文件。即使我加载了json文件。但是通过角度返回未找到。 现在,远程文件具有以下结构: 可以使用$ http.get()而不是$ http.jsonp()来获取上述文件。JSONP无法解析具有上述结构的.json文件。我该如何解决? 问题答案: 您需要在传递给的URL中指定。 从Angular
问题内容: 对于使用Apache的HTTP客户端(org.apache.http.client)上传文件,我具有以下代码: 效果很好,但是现在我想要一个进度条来显示文件上传的进度。如何做到这一点?我在使用Java的文件上传(带有进度栏)中找到了一个代码段,但是它是为Apache HTTP Client3(org.apache.commons.httpclient)设计的,而RequestEntit
我有一个应用程序,我想上传两个图像,一个是普通图像,第二个是缩略图。我现在忽略缩略图,只关注主图像。我正在进行的步骤如下: 第1步:上传图片第2步:获取下载链接为字符串第3步:在Firebase实时数据库中添加下载链接 我被困在步骤2我已经做了以下: 我使用文档来帮助:https://firebase.google.com/docs/storage/android/upload-files 然而,