Swift Data to base64带数据的字符串:content/type



我正在尝试将图像发送到后端,它需要是Base64编码的字符串,但添加了:

data:image/png;base64,

在Base64String的开头。所以我的字符串看起来是这样的:

let imageBase64WithHeader = """
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMA
...
Ym48kN77Vtm7vkU0HDjfH3t6air16KLX+DWftQfvld2NP/z9TrRKvugPGKwAAAABJRU5ErkJggg==
"""

对于我的测试,我使用以下web,并选择DataUri作为输出格式

有Swift的方法吗?

到目前为止:

myImageData.base64EncodedString()

正如预期的那样,只返回base64字符串,但没有标头。

您可以将所需的标头连接到字符串,如下所示:

let header = "data:image/png;base64,"
let imageBase64WithHeader = header + myImageData.base64EncodedString()

Alobali提出了一个很好的观点。最后,我实现了这样的数据扩展,而不是硬编码。我们支持不同的格式

extension Data {
/// Returns the image format if known
var imageFormat: ImageFormat {
guard let header = map({ $0 as UInt8 })[safe: 0] else {
return .unknown
}
return ImageFormat(byte: header)
}

/// Returns the base64 String representation of an Image data:image/png;base64, **BASE64STRING**
var imageBase64URIOutputString: String? {
guard let mimeType = imageFormat.mimeType else {
return nil
}

return "data:(mimeType);base64,(base64EncodedString())"
}
}

其中:

enum ImageFormat: String, CaseIterable {
/// Is a PNG image
case png
/// Is a JPEG image
case jpeg
/// Is a GIF image
case gif
/// Unknown image format
case unknown

/// Initialises the image format
/// - Parameters:
///   - byte: The byte that identifies the format
init(byte: UInt8) {
switch byte {
case 0x89:
self = .png
case 0xFF:
self = .jpeg
case 0x47:
self = .gif
default:
self = .unknown
}
}

/// Returns the mimeType for the image. If image format is png, **image/png** will be returned. If image format is unknown, **nil** will be returned
var mimeType: String? {
switch self {
case .unknown:
return nil
default:
return "image/" + rawValue // Avoid using ()
}
}
}

可以这样称呼:

print(myImageData.imageBase64URIOutput)

最新更新