swift - 在 swift 4.1 中在服务器端上传图片。图像类型的错误问题:
问题描述
我想在服务器上上传图像。我的以下代码出现图像类型错误:传递参数。我使用NSUrlSession
并上传图片。以下代码使用转换器从 Objective-C 转换为 swift。我不知道为什么我会收到这个错误。我是 Swift 语言的新手。我是 Objective-C 开发人员。现在我正在快速学习,如果有任何错误也请给我建议。提前致谢。
func uploadImage1() {
diagnosis = ""
let dict = UserDefaults.standard.dictionary(forKey: "login")! as NSDictionary
let token = dict.object(forKey: "Token")
let Doctor_Id = dict.object(forKey: "UserId")
let patientIdNum = indfoDict.object(forKey: "Patient_Id") as! NSNumber
let patientId = patientIdNum.stringValue
doctorID = Doctor_Id as! String
let BoundaryConstant = "----------V2ymHFg03ehbqgZCaKO6jy"
// var FileParamConstant = "filedata"
let requestURL = URL(string: "https://www.stopbadcheck.com/IntegrationService.svc/UploadImage")
let request = NSMutableURLRequest()
request.cachePolicy = .reloadIgnoringLocalCacheData
request.httpShouldHandleCookies = false
request.timeoutInterval = 30
request.httpMethod = "POST"
if let aKey = token {
request.addValue("\(aKey)", forHTTPHeaderField: "Token")
}
let contentType = "multipart/form-data; boundary=\(BoundaryConstant)"
request.setValue(contentType, forHTTPHeaderField: "Content-Type")
var body = Data()
if (image != nil) {
imageData = UIImageJPEGRepresentation(image!, 1)
}
if (imageData != nil) {
if let anEncoding = "--\(BoundaryConstant)\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if (image != nil) {
if let anEncoding = "Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
print("body image input ---> \(body)")
}
if let anEncoding = "Content-Type: image/jpeg\r\n\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
body.append(imageData!)
if let anEncoding = "\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
// param1
if let anEncoding = "--\(BoundaryConstant)\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "Content-Disposition: form-data; name=\"Patient_Id\"\r\n\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = patientId.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
// param2
if let anEncoding = "--\(BoundaryConstant)\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "Content-Disposition: form-data; name=\"Doctor_Id\"\r\n\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = doctorID.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
// param3
if let anEncoding = "--\(BoundaryConstant)\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "Content-Disposition: form-data; name=\"Diagnosis_Desciption\"\r\n\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = diagnosis.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
if let anEncoding = "--\(BoundaryConstant)--\r\n".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) {
body.append(anEncoding)
}
request.httpBody = body
let postLength = "\(UInt(body.count))"
request.setValue(postLength, forHTTPHeaderField: "Content-Length")
request.url = requestURL
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if let data = data {
// do what you want in success case
print(data)
do {
let json = try JSONSerialization.jsonObject(with: data) as! Dictionary<String, AnyObject>
print("Json--->", json)
DispatchQueue.main.async {
var dict = NSDictionary()
dict = json as Dictionary as NSDictionary
print("Dict--->",dict)
}
} catch {
print("error")
}
}
})
dataTask.resume()
}
}
解决方案
推荐阅读
- node.js - 如何使用 Node Js 读取 XML 中的属性和值
- reactjs - 如何将 componentDidMount 内的异步函数“翻译”为 UseEffect 内的异步函数?
- python - 仅迭代数据框的一部分的方法
- r - 按因子分组的计数 NA
- python - 替换函数中的对象引用
- xml - 元素值的 Xpath,其中属性的值是某物
- splunk - 用于仪表板创建的 Splunk 角色验证
- javascript - 有没有办法在不复制的情况下用另一个替换 iframe 的文档?
- angular - Angular 应用程序中的订阅未检索数据
- git - “远程分支”、“远程跟踪分支”和“跟踪分支”可以有不同的名称吗?