【问题标题】:Send image to API - Swift 4将图像发送到 API - Swift 4
【发布时间】:2018-06-06 21:07:26
【问题描述】:

我是 Swift 新手,在从 MacOS 应用程序向 api 发送图像时遇到了一些问题。我尝试了很多代码,这个(我认为)最正确,但它不起作用:

func mimeTypeForPath(path: String) -> String {
    let url = NSURL(fileURLWithPath: path)
    let pathExtension = url.pathExtension

    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension! as NSString, nil)?.takeRetainedValue() {
        if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
            return mimetype as String
        }
    }
    return "application/octet-stream";
}

func sendScreenshoot(url: String){
    let img = NSImage(byReferencingFile: home.path)
    guard let uploadData = try? img?.tiffRepresentation else {
        return
    }
    let mimetype = mimeTypeForPath(path: home.path)
    print(mimetype)
    let boundary = "Boundary-\(UUID().uuidString)"
    print(boundary)
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
    var body = Data()
    body.appendString("--\(boundary)\r\n")
    body.appendString("Content-Disposition: form-data; name=\"screenshot\"; filename=\"screenshot.png\"\r\n")
    body.appendString("Content-Type: \(mimetype)\r\n\r\n")
    body.append(uploadData!)
    body.appendString("\r\n")
    body.appendString("--\(boundary)--\r\n")
    request.httpBody = body
    URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) -> Void in
        print(error)
    }).resume()

}

用swift 4 Mac OS(不带Alamofire)发送文件(图像)的最佳方式是什么?

【问题讨论】:

标签: swift macos


【解决方案1】:

试试下面的代码

func myImageUploadReques(){
    if let data:Data = UIImageJPEGRepresentation(img_Selected.image!, 0.5) {
        let base64String = data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))
        print(base64String)
        let strBase1 = base64String.replacingOccurrences(of: "+", with: "%2B", options: NSString.CompareOptions.literal, range: nil)
        let str =  strBase1.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        var params: [String:String] = [:]
        params["action"] = "upload_file"
        params["document_type"] = "image"
        params["file"] = str
        myRequest.SendRequestUrl(del: self as MyURLRequestDelegate, params: params , type: "upload_file")
        LoadingOverlay.shared.showLoaderView(view: self.view)
    }
}

【讨论】:

  • 谢谢,但它似乎适用于 iOS,我需要 Mac OS。我没有那个功能。
【解决方案2】:

我找到了可行的解决方案。

func sendScreenshoot(url: String){

    let img = try? Data(contentsOf: home)
    let mimetype = mimeTypeForPath(path: home.path)
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    let boundary = "Boundary-\(NSUUID().uuidString)"
    request.setValue("multipart/form-data; boundary=\(boundary)",
        forHTTPHeaderField: "Content-Type")
    let body = NSMutableData()
    let fname = "screenshoot.png"
    body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
    body.append("Content-Disposition:form-data;name=\"photo\"\r\n\r\n".data(using: String.Encoding.utf8)!)
    body.append("Incoming\r\n".data(using: String.Encoding.utf8)!)
    body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
    body.append("Content-Disposition:form-data; name=\"file\";filename=\"\(fname)\"\r\n".data(using: String.Encoding.utf8)!)
    body.append("Content-Type: \(mimetype)\r\n\r\n".data(using:
        String.Encoding.utf8)!)
    body.append(img!)
    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
    }
    task.resume()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2018-04-09
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多