【问题标题】:How to upload data and string to sderver [Swift,Php]如何将数据和字符串上传到服务器 [Swift,Php]
【发布时间】:2019-01-29 15:39:01
【问题描述】:

在我的 swift 应用程序中,我有以下功能:

func imageUploadRequest(imageView: UIImageView, uploadUrl: NSURL, param: [String:String]?) {

    let request = NSMutableURLRequest(url:uploadURL! as URL);
    request.httpMethod = "POST"

    let postParameters = "email=" + String(email)
    request.httpBody = postParameters.data(using: String.Encoding.utf8)

    let boundary = generateBoundaryString()
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    let imageData = UIImageJPEGRepresentation(imageView1.image!, 1.0)
    if (imageData == nil)  { return }

    request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data

    let task =  URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {
        (data, response, error) -> Void in

        if let data = data {

            _ =  try!JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary

        } else if let error = error {
            print(error.localizedDescription)
        }
    })
    task.resume()
}

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 让 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 = profilePicturePath
    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)"
}

func downloadImage(url: URL) {

    getDataFromUrl(url: url) { data, response, error in
        guard let data = data, error == nil else { return }
        print(response?.suggestedFilename ?? url.lastPathComponent)
        DispatchQueue.main.async() {
            self.imageView1.image = UIImage(data: data)
            self.tableView.reloadData()
        }
    }
}

USER_IMG_SET.php

$email = $_POST['email'];

//$email = "galileogalilei@yahoo.com";

$target_dir = "../usersAccountData/".$email;

if(!file_exists($target_dir)) {
mkdir($target_dir, 0755, true);
}

$target_dir = $target_dir . "/" . basename($_FILES["file"]["name"]);

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir)) {
echo json_encode([
"Message" => "The file ". basename( $_FILES["file"]["name"]). " has been uploaded.",
"Status" => "OK",
"userId" => $_REQUEST["userId"]
]);

} else {

echo json_encode([
"Message" => "Sorry, there was an error uploading your file.",
"Status" => "Error",
"userId" => $_REQUEST["userId"]
]);

}

我上传了图像数据,我还想用相同的请求在 php ($email = $_POST['email'];) 中上传用户电子邮件。 我该怎么做?

因为我没有其他细节要写! « Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illoinvente veritatis et quasi architecto beatae vitae dicta sunt, explicabo。 Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, non numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem。 »

【问题讨论】:

  • 您没有显示createBodyWithParameters(parameters:filePathKey:imageDataKey:boundary:) 的定义。此外,您没有显示您如何称呼您的imageUploadRequest(imageView:uploadUrl:param:)。调用该方法时,您可能需要将["email": email] 传递给param:

标签: php swift


【解决方案1】:
request.httpBody = createBodyWithParameters(parameters: param, filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data

这里的参数将包含 imageData 并且 imageDataKey 将是服务器的键名

【讨论】:

  • 谢谢,但我不明白,你能解释一下吗?
  • 首先查看图像,您必须在服务器端指定要获取图像的密钥。然后在参数中 imageData 将只针对该键进行选择
猜你喜欢
  • 2016-06-10
  • 2017-09-30
  • 2019-07-23
  • 1970-01-01
  • 2013-12-30
  • 2014-08-20
  • 2016-02-10
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多