gpt4 book ai didi

ios多部分图像上传,上传的文件已损坏

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:31 27 4
gpt4 key购买 nike

我正在向服务器发出多部分 POST 请求并且一切正常,但我正在上传的 jpeg 没有文件扩展名并且无法打开(文件大小与原始文件大小相同)。我已经在不同的服务器上尝试过,但出现了同样的错误,所以我假设这是我的应用程序代码的问题。

let boundary = generateBoundaryString()
let request = NSMutableURLRequest(URL: Urls.sendFileURL)
request.HTTPMethod = "POST"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

let body = NSMutableData()

for (key, value) in params {
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString("\(value)\r\n")
}


let imageData: NSData = UIImageJPEGRepresentation(photo, 0.8)

body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"iosUpload\"; filename=\"iosUpload.jpg\"\r\n\r\n")
body.appendString("Content-Type: image/jpeg\r\n\r\n")
body.appendData(imageData)
body.appendString("\r\n")
body.appendString("--\(boundary)\r\n")

request.HTTPBody = body

我已经使用 posttestserver.com 尝试过我的 POST this is the result

最佳答案

我遇到了类似的问题:我使用 multipart/form-data 上传了一个 jpeg,当我从服务器重新下载相同的文件时, 无法打开它Preview.app,也不能用于创建 UIImage 的实例,因为它已损坏。

enter image description here

我用 FileMerge.app(包含在 Xcode.app/Contents/Applications/中)并排打开这两个文件,令我惊讶的是,损坏的文件顶部有一个额外的空行 (CRLF); 否则,它们是相同的:

显然,我插入了一个额外的 \r\n 就在我将文件内容附加到上传请求的正文之前。

我更改了我的上传代码:

let body = NSMutableData()

body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"inputFile\"; filename=\"\(fileName)\"\r\n")
body.appendString("Content-Type: image/jpeg\r\n\r\n\r\n") // !!!! THREE CRLF
body.appendData(fileData)
body.appendString("\r\n--\(boundary)--")

...为此:

let body = NSMutableData()

body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"inputFile\"; filename=\"\(fileName)\"\r\n")
body.appendString("Content-Type: image/jpeg\r\n\r\n") // !!!! TWO CRLF
body.appendData(fileData)
body.appendString("\r\n--\(boundary)--")

...现在下载的文件是一个有效的 jpeg,与我上传的相同。

所以我建议您并排打开文件的两个版本,看看有什么变化。

(FileMerge 会提示“文件不是 ascii。”,但忽略它并继续。)

关于ios多部分图像上传,上传的文件已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30188456/

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