我正在尝试将图像上传到PHP服务器,图像上传工作正常。但我也想用图像文件本身发送一些参数。请帮助我使用Swift 2.2 / iOS 9.3上的以下代码,以了解我如何添加参数以及图像文件。
我的PHP服务器代码如下:
$info = pathinfo($_FILES['file']['name']);
if ($info) {
$imageName = md5(uniqid(rand(), true));
$imageSize = getimagesize($_FILES['file']['tmp_name']);
if ($imageSize === FALSE) {
$newname = "default.jpg";
}
else {
$ext = $info['extension']; // get the extension of the file
$newname = $imageName.".".$ext;
}
$target = './images/'.$newname;
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target))
{
sendResponse(200, 'SUCCESS_IMAGE');
return true;
}
Swift代码如下:
func UploadRequest()
{
let url = NSURL(string: "http://www.themostplayed.com/rest/upload.php")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
if (image.image == nil)
{
return
}
let image_data = UIImagePNGRepresentation(image.image!)
if(image_data == nil)
{
return
}
let body = NSMutableData()
let fname = "test.png"
let mimetype = "image/png"
body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(image_data!)
body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
request.HTTPBody = body
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) {
(
let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
return
}
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(dataString)
}
task.resume()
}
func generateBoundaryString() -> String
{
return "Boundary-\(NSUUID().UUIDString)"
}
答案 0 :(得分:1)
您可以使用Alamofire上传带参数的图片,有关详细信息,请参阅以下代码。
func UploadRequest() {
var parameters = [String:AnyObject]()//define parameter according to your requirement
parameters = ["imageName":"Sample"]
let URL = "http://www.themostplayed.com/rest/upload.php"
let image = UIImage(named: "image.png")
Alamofire.upload(.POST, URL, multipartFormData: {
multipartFormData in
if let imageData = UIImageJPEGRepresentation(image, 0.6) {
multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png")
}
for (key, value) in parameters {
multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
}
}, encodingCompletion: {
encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
print("success")
upload.responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
case .Failure(let encodingError):
print(encodingError)
}
})
}
您可以在下面的链接查看Alamofire的指南和API信息。
网址:https://github.com/Alamofire/Alamofire
希望它适合你。