gpt4 book ai didi

ios - Apple 的 b64 数据标准和适当吗?

转载 作者:行者123 更新时间:2023-11-28 14:57:25 25 4
gpt4 key购买 nike

如果这看起来像个骗局,抱歉。我想问一个非常具体的问题,但不确定我的搜索是否真的把我带到了正确的地方。无论如何,这是设置。在 iPhone 相机上拍照,将其转换为 base64 字符串数据,将其通过网络推送到 Node API,将其转换为文件以推送到 S3。非常简单。

适用一般免责声明;为了简单性和通用性,我更愿意在 JSON 中使用 B64 字符串,并且我不会进一步评论表单编码上传的愚蠢行为:)

这是我生成 B64 的非常简单的 Swift 代码,将其转回图像,并将其显示为这些东西有效的证明 - 至少在 Apple 领域。

注意:“redButton”是我的应用程序中的 Assets 之一。为了在 API 上发送更小的数据包进行测试,我切换到那个,但结果仍然存在。谢谢。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// build data packet
imagePicker.dismiss(animated: true, completion: nil)
//let image:UIImage = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
let image:UIImage = UIImage(named: "redButton")!
showAlert( title: "size", msg: String( describing: image.size ) )
let data = UIImageJPEGRepresentation(image, 0.5)
let b64 = data!.base64EncodedData()//.base64EncodedString()//options: Data.Base64EncodingOptions.lineLength64Characters)
let b64String = b64.base64EncodedString()
debugPrint( "len=" + String( describing: b64String.lengthOfBytes(using: String.Encoding.utf8)))
let newDataString = Data.init(base64Encoded: b64String )
let newData = Data.init(base64Encoded: newDataString! )
let newImage = UIImage.init(data: newData!)
tmpImage.image = newImage
}

一切正常。我在小 UIImage 中看到了图像。

因此,至少在 Apple 阵营中,img->b64->img 有效。

然而...

当我复制 b64 编码字符串数据的实际结果 blob,并手动将其粘贴到源属性中,用数据内容标记时,它不会显示预期的图像,事实上,只显示损坏的图像在浏览器中。

即...

<html>
<body>
<img src="data:image/jpg;base64,LzlqLzRBQVFTa1pKUmdBQkFRQUFTQUJJ (brevity)...">
</body>
</html>

那么,我在 HTML 页面的校对中做错了什么吗?我是否期望从 Apple 所谓的 base64 字符串数据中得到错误的结果?我是否只是简单地遗漏了一些明显痛苦的东西,表明我 sleep 不足的大脑缺失了?

它最终通过 HTTP POST 调用发送到服务器,按照正常方式,作为字典,通过较新的 Swift 中的 json 编码转换成 json。

var params = ["image": [ "content_type": "image/jpg", "filename":"test.jpg", "file_data": b64String] ]

为了完整起见,这是我将这些数据重构为二进制位的节点代码,然后从这里将其推送到 S3 系统,在每种情况下,文件都不会被识别为正确的 JPG文件。

var b64 = req.body.image.file_data;
var base64data = new Buffer(b64, 'base64'); // according to all the new-node version docs

我正忙于下周向投资者推介的一款关键产品,显然这是为那次 session 展示的一个关键功能。

告诉我我遗漏了一些非常明显的东西,而且我很愚蠢。我欢迎,拜托。这不可能只是一些愚蠢的事情,对吧?

谢谢!

最佳答案

这里:

let b64 = data!.base64EncodedData()
let b64String = b64.base64EncodedString()

你对给定的数据进行了两次编码。它应该只是

let b64String = data!.base64EncodedString()

你的“in Apple land”测试成功是因为

let newDataString = Data.init(base64Encoded: b64String )
let newData = Data.init(base64Encoded: newDataString! )

还对 Base64 进行了两次解码。那现在只是

let newData = Data(base64Encoded: b64String)

关于ios - Apple 的 b64 数据标准和适当吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49194505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com