【发布时间】:2019-11-22 02:36:18
【问题描述】:
我必须上传图片、音频、文件。我正在使用 Alamofire 上传。所有内容都已上传,包括截图等图库图像,但从相机拍摄的照片未上传。 这是我的代码:
func requestUploadFileWithMultipart(connectionUrl: String, param : [String: AnyObject], filePath: String?, _ callBack: @escaping (_ data: DataResponse<Any>?, _ error:Error?) -> Void) {
let URLString = MainURL + connectionUrl
Alamofire.upload(multipartFormData: { multipartFormData in
for (key, value) in param {
let stringValue = "\(value)"
multipartFormData.append(stringValue.data(using: String.Encoding.utf8)!, withName: key)
print("Key: \(key), Value: \(stringValue)")
}
if filePath != "" {
do {
var fileData = try Data(contentsOf: URL(string: filePath!)!)
let ext = URL(fileURLWithPath: filePath!).lastPathComponent.components(separatedBy: ".").last
let mime = filePath?.mimeTypeForPath()
let fileName = "\(Date().timeIntervalSince1970)".components(separatedBy: ".").first
multipartFormData.append(fileData, withName: "file", fileName: "\(fileName ?? "file").\(ext ?? "")", mimeType: mime ?? "")
} catch {
print("error loading file in multipart")
}
}
}, to:URLString) { (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (progress) in
print("Upload Progress: \(progress.fractionCompleted)")
})
upload.responseJSON { response in
print(response.result.value as Any)
callBack(response, nil)
}
case .failure(let encodingError):
print(encodingError)
callBack(nil, encodingError)
}
}
}
【问题讨论】:
-
这是什么意思?你有什么错误?应用程序崩溃或发生其他事情?
-
如果使用您的代码上传的一切正常,那么我怀疑图像格式是罪魁祸首。也许您的后端不支持 HEIF 格式。尝试将图像转换为 JPG/PNG,然后尝试上传。
-
@SahilManchanda 我正在将拾取的图像转换为 .png 并将其保存到 docs 目录中。之后我上传它。
-
@KrutikaSonawala,很高兴您找到了原因。我建议你进一步调查。现在有两种情况 1. 连接失败(可能性较小) 2. 最大上传文件大小(询问您的后端开发人员允许文件上传多少 MB)
-
是的。我问过,但他们说文件没有限制。所以我想知道为什么会这样。但是压缩它起作用了。所以我没有费心去要求他们改变。
标签: ios swift image-upload alamofire-request