【问题标题】:Uploading MP3 file to Firebase Storage ends up being a video/mp3 file将 MP3 文件上传到 Firebase 存储最终成为视频/mp3 文件
【发布时间】:2016-07-10 20:23:05
【问题描述】:

我试图在新的 Firebase 存储选项中保存音频,音频设置为 .mp3 文件并通过此代码上传到 Firebase:UploadTask uploadAudio = storageRef.putFile(audioUri); 问题是音频存储为视频/mp4 文件,并且由于 MediaPlayer 无法将其再现为音频,我该如何解决这个问题?

【问题讨论】:

标签: android firebase firebase-storage


【解决方案1】:

移动评论回答:

您可以将 specify metadata when you upload the file 显式发送到 Firebase。如果您指定setContentType("audio/mpeg"),它应该正确地将文件映射到 MP3。

【讨论】:

  • 我会试试的,但为什么视频和 pdf 文件的类型正确?
  • Firebase Storage 使用以下机制来确定内容类型:由底层系统确定的内容类型(例如 Android ContentResolver,iOS 使用 MobileCoreServices 框架),或者 Firebase 中的 ContentType上传文件的存储元数据。我们不认为文件扩展名是相关的——我们不相信用户为给定的文件类型提供正确的扩展名。很可能即使该文件被标记为.mp3,它实际上是一个没有视频内容的视频文件。
  • 感谢您的解释!
  • 我试过你的答案,它奏效了!唯一的问题是,当我尝试复制链接时它说它已损坏,我尝试在媒体播放器上播放它并复制网络上的链接以仔细检查它,你知道为什么会这样吗?正在发生吗?
  • @MikeMcDonald 是否有您可以在 fb 存储中添加的不同内容类型格式的正确语法列表。例如,我将如何添加 m4a?它只是“音频/m4a”吗?
【解决方案2】:
 class func uploadAudios(data : Data,completion :  @escaping (_ succus : String )->Void){
    var url = ""
    let storage = Storage.storage()
    // Create file metadata including the content type
    let metadata = StorageMetadata()
    metadata.contentType = "audio/mpeg"
    let uploadRef = storage.reference().child("audios/\(UUID().uuidString).mp3")
    uploadRef.putData(data, metadata: metadata) { metadata,
        error in
        if error == nil {
            print("successfully uploaded Audio")
            url = (metadata?.downloadURL()?.absoluteString)!
            print("AhmedRabie \(url)")
            completion(url)
        }
        else {
            print("UploadError \(String(describing: error))")
        }
        
    }
    
}

【讨论】:

  • 在 Swift 语言中的答案,但是,仍然是相同的步骤
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多