我想使用swift将我的图像数据存储在iOS服务器上。我尝试了下面的代码,但它不起作用,我必须做什么改变?
想要上传6张图片。this is my controller view, after clicking save it want to store at server
func myImageUploadRequest()
{
let myUrl = NSURL(string: "http://easemyshop.in/upload_test/new.php");
//let myUrl = NSURL(string: "http://easemyshop.in/upload_test/new.php");
let request = NSMutableURLRequest(url:myUrl! as URL);
request.httpMethod = "POST";
let param = [
"tag" : "all",
"count" : "1",
"shopname" : "MayurShop",
"partyName" : "Paras",
"cur_date" : "14-06-2017",
"due_date" : "20-06-2017",
"karagir" : "Santra",
"remark" : "Urgent",
"order_status" : "Order Reccived"
/*
"firstName" : "Mayur",
"lastName" : "Shinde",
"userId" : "101"
*/
]
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let imageData = UIImageJPEGRepresentation((imageView?.image!)!, 1)
if(imageData==nil) { return; }
request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data
myActivityIndicator.isHidden = false
myActivityIndicator.startAnimating();
let task = URLSession.shared.dataTask(with: request as URLRequest)
{
data, response, error in
if error != nil
{
print("******** error=\(error)")
return
}
// You can print out response object
print("\n\n******* response *******\n\n")
print("\(response!)")
print("\n\n**************************\n\n")
// Print out reponse body
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("\n\n****** response data *******\n\n")
print("\(responseString!)")
print("\n\n**************************\n\n")
do
{
let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary
print("\n\n*************\n\n")
print(json!)
print("\n\n*************\n\n")
DispatchQueue.main.async(execute: {
self.myActivityIndicator.stopAnimating()
self.myActivityIndicator.isHidden = true
//self.imageView?.image = nil;
});
}
catch
{
print("\n\n*************ERROR******** => \(error)\n\n")
}
}
task.resume()
}
func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
let body = NSMutableData();
if parameters != nil {
for (key, value) in parameters! {
body.appendString(string: "--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString(string: "\(value)\r\n")
}
}
let filename = "user-profile.jpg"
let mimetype = "image/jpg"
body.appendString(string: "--\(boundary)\r\n")
body.appendString(string: "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n")
body.append(imageDataKey as Data)
body.appendString(string: "\r\n")
body.appendString(string: "--\(boundary)--\r\n")
return body
}
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().uuidString)"
}
答案 0 :(得分:2)
请尝试使用以下代码在服务器上上传图片,并将 fileName 变量值替换为您要将图片文件发送到服务器的值。
func uploadImage(urlString:String,headers:[String:String]?,params:[String:String]?,image:UIImage?){
let boundary: String = "------VohpleBoundary4QuqLuM1cE5lMwCy"
let contentType: String = "multipart/form-data; boundary=\(boundary)"
let request = NSMutableURLRequest()
request.url = URL(string: urlString)
if let tHeaders = headers {
for (key, value) in tHeaders {
request.setValue(value, forHTTPHeaderField: key)
}
}
request.httpShouldHandleCookies = false
request.timeoutInterval = 60
request.httpMethod = "POST"
request.setValue(contentType, forHTTPHeaderField: "Content-Type")
let body = NSMutableData()
if let parameters = params {
for (key, value) in parameters {
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(value)\r\n".data(using: String.Encoding.utf8)!)
}
}
//which field you have to sent image on server
let fileName: String = "file"
if image != nil {
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition: form-data; name=\"\(fileName)\"; filename=\"image.png\"\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Type:image/png\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append(UIImagePNGRepresentation(image!)!)
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 session = URLSession.shared
let task = session.dataTask(with: request as URLRequest) { (data, response, error) in
if(error != nil){
print(String(data: data!, encoding: .utf8) ?? "No response from server")
}
}
task.resume()
}
在您的PHP服务器上,您可以获得这样的文件名
<?php
echo $_FILES['file']['name'];
?>
答案 1 :(得分:1)
encodeWithCoder
请尝试......