无法将类型'__NSCFString'的值强制转换为'NSData'

技术女郎

我正在尝试将录制的视频转换为mp4,然后将其上传到我的服务器。我在转换值时遇到了问题,并且到处都在寻找解决方案。应用程序在某个时刻崩溃,我继续收到“无法将类型'__NSCFString'的值强制转换为'NSData'的错误。任何帮助表示赞赏。

 let time = endDate.timeIntervalSince(startDate)
            print(time)
            print("Successful!")
            print(exportSession?.outputURL as Any)
            let mediaPath = exportSession?.outputURL?.path as NSString!
            self.uploadVideo(mediaPath as! Data)

//上传视频

func uploadVideo(_ mediaPath: Data) {

    func createBodyWithParams(_ parameters: [String: String]?, filePathKey: String?, mediaPath: Data, boundary: String) -> Data {

        let body = NSMutableData();

        if parameters != nil {
            for (key, value) in parameters! {
                body.appendString("--\(boundary)\r\n")
                body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
                body.appendString("\(value)\r\n")
            }
        }
        var filename = ""

        if imageSelected == true {
            filename = "video-\(uuid).mp4"
        }


        let mimetype = "video/mp4"
        body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
        body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
        body.appendString(String(describing: "Content-Type: \(mimetype)\r\n\r\n".data(using: String.Encoding.utf8)))
        body.append(mediaPath)
        body.append(String(format: "\r\n").data(using: String.Encoding.utf8)!)

        body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)

        return body as Data

    }
    let id = user!["id"] as! String
    uuid = UUID().uuidString


    let url = URL(string: "http://www.foo.com/videoposts.php")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    let param = [
        "id" : id,
        "uuid" : uuid
    ]
    print("just passed videopost page")
    // body
    let boundary = "Boundary-\(UUID().uuidString)"
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    // if picture is selected, compress it by half
    //let imageData = Data()


    // ... body
    request.httpBody = createBodyWithParams(param, filePathKey: "filename", mediaPath: AnyObject, boundary: boundary)

    // launch session
    URLSession.shared.dataTask(with: request) { data, response, error in

        // get main queu to communicate back to user
        DispatchQueue.main.async(execute: {


            if error == nil {

                do {

                    // json containes $returnArray from php
                    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

                    // declare new var to store json inf
                    guard let parseJSON = json else {
                        print("Error while parsing")
                        return
                    }

                    // get message from $returnArray["message"]
                    let message = parseJSON["message"]

                    // if there is some message - post is made
                    if message != nil {

                        // reset UI

                        self.postBtn.alpha = 0.4
                        self.imageSelected = false

                        // switch to another scene
                        self.tabBarController?.selectedIndex = 4

                    }

                } catch {

                    // get main queue to communicate back to user
                    DispatchQueue.main.async(execute: {
                        let message = "\(error)"
                        appDelegate.infoView(message: message, color: colorSmoothRed)
                    })
                    return

                }

            } else {

                // get main queue to communicate back to user
                DispatchQueue.main.async(execute: {
                    let message = error!.localizedDescription
                    appDelegate.infoView(message: message, color: colorSmoothRed)
                })
                return

            }


        })

        }.resume()

}
瓦迪安

你是混合起来String,并DatacreateBodyWithParams

NSMutableData无论如何,不要在Swift 3+中使用Data易变var

但是,我建议将主体组成为StringData在最后创建对象。

func createBodyWithParams(_ parameters: [String: String]?, filePathKey: String?, mediaPath: Data, boundary: String) -> Data {

    var body = ""

    if let params = parameters {
        for (key, value) in params {
            body += "--\(boundary)\r\n"
            body += "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n"
            body += "\(value)\r\n"
        }
    }
    var filename = ""

    if imageSelected {
        filename = "video-\(uuid).mp4"
    }

    let mimetype = "video/mp4"
    body += "--\(boundary)\r\n"
    body += "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(mimetype)\r\n\r\n"
    body += String(data: mediaPath, encoding: .utf8)!
    body += "\r\n"

    body += "--\(boundary)--\r\n"

    return Data(body.utf8)

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift-无法将类型'__NSCFString'的值强制转换为'NSDictionary'

无法在 json 工作中将“NSData”类型的值转换为“Date”类型的强制转换?

如何解决此错误:无法将类型'__NSCFString'(0x10354a248)的值强制转换为'UIImage'(0x104c42b48)

无法将NSData转换为int

将NSData转换为String?

将NSData转换为NSDictionary

将UIImage转换为NSData

将UIImage转换为NSData

将NSData转换为SecKeyRef

将NSData转换为UIImage

无法强制将“ [记录]”类型的值转换为“记录”类型

无法强制将'UIViewController'类型的值转换为'TableView'类型

如何再次将打印的NSData转换为NSData?

Swift:无法转换类型“ NSData!” 键入“ NSURLRequest!”

无法将类型“ UITableViewController”的值强制转换为“ UINavigationController”

无法将类型'__NSCFNumber'()的值强制转换为'NSArray'swift

无法将类型“ NSTaggedPointerString”的值强制转换为“ NSNumber”

无法将类型NSTaggedPointerString的值强制转换为NSDictionary

无法将类型'__NSCFConstantString'的值强制转换为'NSArray'

无法将类型'__NSCFData'的值强制转换为'NSDate'

值影响后,无法将类型强制转换为“布尔”

无法将类型T的值强制转换为T

无法将类型UITableViewCell的值强制转换为“ ActuTblCell”

如何将NSData转换为多种类型的Ints

无法快速将NSData转换为NSString

ARC禁止将非目标C指针类型'const UInt8 *'(aka'const unsigned char *')强制转换为'NSData *'

如何将NSData转换为NSString?

将NSData从NSURLSession转换为JSON

将HEX NSString转换为NSData