Ich versuche, ein Bild auf PHP-Server hochladen und Bild-Upload funktioniert gut. Aber ich möchte auch einige Parameter mit der Bilddatei selbst senden. Bitte helfen Sie mir mit dem folgenden Code auf Swift 2.2/iOS 9.3 für wie ich Parameter mit der Bilddatei hinzufügen soll.Bild mit Parameter in Swift hochladen 2.2
Mein PHP-Server-Code geht so:
$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 Code geht so:
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)"
}
Vielen Dank für die Hilfe, sind Sie sicher, dass die Alamofire-Bibliothek nicht gegen die Apple-Richtlinien verstößt. Mein Bildupload-Code funktioniert auch jetzt noch gut, ich möchte nur die Parameter hinzufügen. Ich denke, wenn wir es mit meinem bestehenden Code machen können, wäre das hervorragend !! –
Ja, es verstößt nicht gegen eine der Apple Richtlinien. Es ist auch weit verbreitet für die Durchführung der Web-Service-Aufgabe. Wie vor dieser Bibliothek hatte ich den gleichen Code verwendet, den Sie für das Hochladen des Bildes geteilt hatten, aber jetzt benutze ich Alamofire API dafür. –