【发布时间】:2016-06-27 10:50:20
【问题描述】:
我正在尝试通过 HTTP POST 将带有文本消息的图像上传到 php 服务器,但发送的消息作为 null 到达服务器
@IBOutlet var image: UIImageView!
var CUSTOMER_KEY = "dkeqnq9fmkhq"
var msg = "The first msg"
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func selectVideo(sender: AnyObject) {
var videoPickerController = UIImagePickerController()
videoPickerController.delegate = self
videoPickerController.sourceType = .SavedPhotosAlbum
videoPickerController.mediaTypes = [kUTTypeMovie as String]
self.presentViewController(videoPickerController, animated: true, completion: nil)
}
@IBAction func selectPicture(sender: AnyObject) {
let ImagePicker = UIImagePickerController()
ImagePicker.delegate = self
ImagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
self.presentViewController(ImagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
image.image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func upload_request(sender: AnyObject) {
UploadRequest()
}
func UploadRequest()
{
let comURL = "myurlhere?customer_key=dkeqnq9fmkhq&msg=MSGHere"
let sendURL:NSURL = NSURL(string: comURL.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)!
let request = NSMutableURLRequest(URL: sendURL)
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 newRandomName = randomStringWithLength(32)
let fname = (newRandomName as String) + ".png"
let mimetype = "image/png"
print ("New File Name:" + (newRandomName as String))
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)"
}
func randomStringWithLength (len : Int) -> NSString {
let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var randomString : NSMutableString = NSMutableString(capacity: len)
for (var i=0; i < len; i++){
var length = UInt32 (letters.length)
var rand = arc4random_uniform(length)
randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
}
return randomString
}
另外,如果我想做同样的事情来同时发送图像、视频和文本消息,我该怎么做才能在选择视频路径后通过 HTTP POST 将其上传到服务器?
【问题讨论】:
标签: php ios xcode swift http-post