【问题标题】:iOS: How to get a specific string from a Data containing Strings and an image?iOS:如何从包含字符串和图像的数据中获取特定字符串?
【发布时间】:2020-04-15 09:15:40
【问题描述】:

我有向正文添加值的代码:

let body = NSMutableData()
let mimetype = "image/jpg"

//define the data post parameter

body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"eventId\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(eventId)\r\n".data(using: String.Encoding.utf8)!)

body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"contactId\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(contactId)\r\n".data(using: String.Encoding.utf8)!)

body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"type\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(type)\r\n".data(using: String.Encoding.utf8)!)

body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"file\"; filename=\"\(fileName)\"\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Type: \(mimetype)\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append(image_data!)
body.append("\r\n".data(using: String.Encoding.utf8)!)

body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)

request.httpBody = body as Data

如何转换成字符串?我想得到边界,但做不到。

当我这样做时,它让我为零:let test = String(data: body as Data, encoding: .utf8)

【问题讨论】:

  • 改用数据,var body = Data()
  • @JoakimDanielson 我做到了,还是一样。可能是因为我编码的图片很大?
  • 这里的问题是图片数据不能转成字符串。你的目标是什么?
  • @LeoDabus 我的目标只是检索此数据中的边界字符串。我添加了一个安全固定,如果可能的话,我不想破坏我所做的所有代码。如果我能得到数据中的边界值,那应该会很有帮助。另一种情况,我必须重做我所做的一切
  • 就像其他人所说的,您不能将图像数据转换为 utf8 字符串。如果它只是您想要的边界,那么您可以将数据转换为 ascii 字符串。只要边界只包含可以工作的 ascii 字符。但是,我觉得这不是一种可靠或安全的方法,所以我不推荐它。但我对这个请求有点困惑——你是通过字符串插值自己添加边界的,那么为什么你没有对它的引用呢?

标签: ios swift nsurlrequest nsmutabledata


【解决方案1】:

如果您需要您的边界,您应该在与图像数据不同的对象中创建其页眉和页脚数据:

let boundary = UUID().uuidString
let eventId = "your event ID"
let contactId = "your contact ID"
let type = "your type string"
let mimetype = "image/jpg"
let fileName = "the file name"
let imageData = Data() // your image data
let boundaryHeader = Data("""
--\(boundary)\r\n
Content-Disposition:form-data; name=\"eventId\"\r\n\r\n
\(eventId)\r\n
--\(boundary)\r\n
Content-Disposition:form-data; name=\"contactId\"\r\n\r\n
\(contactId)\r\n
--\(boundary)\r\n
Content-Disposition:form-data; name=\"type\"\r\n\r\n
\(type)\r\n
--\(boundary)\r\n
Content-Disposition:form-data; name=\"file\"; filename=\"\(fileName)\"\r\n
Content-Type: \(mimetype)\r\n\r\n
""".utf8)

let boundaryFooter = Data("""
\r\n
--\(boundary)--\r\n
""".utf8)

let body = boundaryHeader + imageData + boundaryFooter

var request = URLRequest(url: URL(string: "http://www.example.com/whatever")!)
request.httpBody = body

print(String(data: boundaryHeader, encoding: .utf8) ?? "nil")

这将打印:

内容配置:表单数据; name="contactId"

您的联系人 ID

--2583374D-68AF-4EE1-96A5-740CCA17C51D

内容配置:表单数据;名称="类型"

你的类型字符串

--2583374D-68AF-4EE1-96A5-740CCA17C51D

内容配置:表单数据;名称=“文件”; filename="文件名"

内容类型:图片/jpg

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 2020-08-26
    • 1970-01-01
    • 2017-07-28
    • 2021-10-23
    • 1970-01-01
    • 2017-08-02
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多