使用Swift将图像保存为image/jpeg格式到Firebase。

5
我正在尝试使用图像/jpeg的MIME类型将图片上传到Firebase,但出于某种原因,它们都以应用程序/octet-stream的形式上传。
这是我的代码片段:
let storageRef = Storage.storage().reference().child("ProfilePictures/\(image).jpg")
        if let uploadData = UIImageJPEGRepresentation(self.pickedImage!, 0.5){
            storageRef.putData(uploadData, metadata: nil, completion:{ (metadata, error) in })

我从相册中的选择器获取了这张图片。
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {

        ImageButton.setBackgroundImage(editedImage, for: .normal)
        ImageButton.setTitle("", for: .normal)
        self.pickedImage = editedImage
    }

    dismiss(animated: true, completion: nil)
}
2个回答

6

您需要为其设置元数据。

试试看。

metadata = { contentType: 'image/jpeg'};


0
let imageNode = storageRef.child("imagePath/\(UUID().uuidString)")
let metaData = StorageMetadata()
metaData.contentType = "image/jpeg"
imageNode.putData(data, metadata: metaData) { (_, _) in
}

说明:

如果我们上传没有任何元数据的文件数据,它将被识别为应用程序/octet-stream。由于数据的未知格式或(缺少扩展名),它保存为二进制文件,即八位字节流文件。

鉴于此,指定文件或数据类型需要定义其contentType。我们可以通过分配媒体类型来实现,这也称为MIME协议

一些常见的MIME类型

扩展名 MIME类型
.gif image/gif
.html text/html
.jpg或.jpeg image/jpeg
.mp4 video/mp4

关于 MIME 扩展名列表,请参见 链接
此外,根据此链接,application/octet-stream 是媒体类型的默认值。

Swift 部分:

关于从 Swift 使用 Firebase 存储,我们可以使用 StorageMetadata 类分配元数据。Firebase 的 putData 方法有一个可选参数 metaData,类型为 StorageMetadata


请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么以及为什么您认为这是最好的方法的解释 - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接