![](/img/trans.png)
[英]UIUserNotificationType was deprecated in iOS10 Swift 3.0
[英]ios10 swift3.0 Alamofire upload picture gets an error
這是我的代碼。 我想使用Alamofire上傳圖片
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let imagePost = info[UIImagePickerControllerOriginalImage] as? UIImage {
let image = imagePost
// transform image into NSData
let data = UIImageJPEGRepresentation(image, 0.5)
// Home path
let homeDirectory = NSHomeDirectory()
let documentPath = homeDirectory + "/Documents"
let fileManager: FileManager = FileManager.default
do {
try fileManager.createDirectory(atPath: documentPath, withIntermediateDirectories: true, attributes: nil)
}
catch let error {
print (error)
}
fileManager.createFile(atPath: documentPath.appending("/image.png"), contents: data, attributes: nil)
let filePath: String = String(format: "%@%@", documentPath, "/image.png")
print("filePath:" + filePath)
// Alamofire upload
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(filePath.data(using: .utf8)!, withName: "head_picture")
}, to: URL, encodingCompletion: { response in
picker.dismiss(animated: true, completion: nil)
print(response)
switch response {
case .success(let upload, _, _):
upload.responseString(completionHandler: { (response) in
print("Success")
print(response)
print("Success")
self.portraitUIImageView.image = UIImage(data: data!)
})
case .failure(let encodingError):
print("error")
print(encodingError)
}
})
}
else {
print ("有錯誤")
}
}
我這樣打印我的請求,網址的一部分被隱藏了
> success(request: $ curl -i \
-X POST \
-b "JSESSIONID=B4148AC39E35C599773A9A86DAE8D19F" \
-H "Content-Type: multipart/form-data; boundary=alamofire.boundary.74e3ed8f93ce9353" \
-H "Accept-Language: zh-Hans-US;q=1.0, en;q=0.9" \
-H "User-Agent: OldFriend/1.0 (MichaelHuang.OldFriend; build:1; iOS 10.3.0) Alamofire/4.4.0" \
-H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
"http://***.**.***.200:9999/upload/head-picture.do", streamingFromDisk: false, streamFileURL: nil)
我想使用Alamofire4.0將頭像上傳到服務器。 現在我收到這樣的錯誤。 我從服務器收到消息,提示我需要提供MultipartFile參數'head_picture'。 但是我確實提供了,我該如何解決?
成功成功:HTTP狀態400 –錯誤的Requesth1 {font-family:Tahoma,Arial,sans-serif; color:white; background-color:#525D76; font-size:22px;} h2 {font-family:Tahoma,Arial, sans-serif;顏色:白色;背景顏色:#525D76;字體大小:16px;} h3 {font-family:Tahoma,Arial,sans-serif;顏色:白色;背景顏色:#525D76;字體大小:14px;}身體{font-family:Tahoma,Arial,sans-serif;顏色:黑色;背景色:白色;} b {font-family:Tahoma,Arial,sans-serif;顏色:白色;背景色:#525D76;} p {font-family:Tahoma,Arial,sans-serif; background:white; color:black; font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px; background-color:#525D76; border:none;}
HTTP狀態400 –錯誤的請求
類型狀態報告
消息必需的MultipartFile參數'head_picture'不存在
描述由於某些東西被認為是客戶端錯誤(例如,格式不正確的請求語法,無效的請求消息框架或欺騙性的請求路由),服務器無法或不會處理請求。
Apache Tomcat / 9.0.0.M18
成功
我已經使用Alamofire成功上傳了圖片,但做起來卻大不相同:
更改此代碼:
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(filePath.data(using: .utf8)!, withName: "head_picture")
}, to: URL, encodingCompletion: { response in
picker.dismiss(animated: true, completion: nil)
print(response)
switch response {
case .success(let upload, _, _):
upload.responseString(completionHandler: { (response) in
print("Success")
print(response)
print("Success")
self.portraitUIImageView.image = UIImage(data: data!)
})
case .failure(let encodingError):
print("error")
print(encodingError)
}
})
喜歡這個:
let req = Alamofire.upload(data, to: URL, method: HTTPMethod.put, headers: nil)
req.response { (response: DefaultDataResponse) in
print(response)
}
您可以嘗試使用其他方法(如post
,並在需要時發送標頭。 希望對您有幫助。
感謝Vinod Kumar,我使用了他提供的代碼
這是代碼,部分url被隱藏
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let imagePost = info[UIImagePickerControllerOriginalImage] as? UIImage {
// 修正圖片的位置
let image = self.fixOrientation(aImage: imagePost)
// 把圖片轉成NSData
let data = UIImageJPEGRepresentation(image, 0.5)
// Home目錄
let homeDirectory = NSHomeDirectory()
let documentPath = homeDirectory + "/Documents"
//文件管理器
let fileManager: FileManager = FileManager.default
//把剛剛圖片轉換的data對象拷貝至沙盒中 並保存為image.png
do {
try fileManager.createDirectory(atPath: documentPath, withIntermediateDirectories: true, attributes: nil)
}
catch let error {
print (error)
}
fileManager.createFile(atPath: documentPath.appending("/image.png"), contents: data, attributes: nil)
let filePath: String = String(format: "%@%@", documentPath, "/image.png")
print("filePath:" + filePath)
// Alamofire upload
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(data!, withName: "head_picture", fileName: "my.jpeg", mimeType: "image/jpeg")
}, to:"http://*******.200:9999/upload/head-picture.do")
{ (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (Progress) in
picker.dismiss(animated: true, completion: nil)
print("Upload Progress: \(Progress.fractionCompleted)")
})
upload.responseJSON { response in
//self.delegate?.showSuccessAlert()
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
// self.showSuccesAlert()
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
self.portraitUIImageView.image = UIImage(data: data!)
case .failure(let encodingError):
//self.delegate?.showFailAlert()
print(encodingError)
}
}
}
else {
print ("有錯誤")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.