Ios Swift图像上传保存为mime“U类型”;“数据”;

Ios Swift图像上传保存为mime“U类型”;“数据”;,ios,node.js,swift,upload,Ios,Node.js,Swift,Upload,我正在尝试上传(ios swift应用程序)一组URL参数和图像,以便在服务器(node express)上创建一个帐户。除了保存在服务器上的图像外,其他一切似乎都工作正常,显示为文件类型“数据”,因此不会显示在浏览器中。值得注意的是,我尝试的图像是使用iphone摄像头拍摄的,作为注册表单的一部分。数据发布正确,文件保存正确(名称正确,位置正确),响应正确 关于httpbody,我有什么遗漏吗?这在浏览器和我的android应用程序中都能正常工作,所以我怀疑这可能是swift httpbody

我正在尝试上传(ios swift应用程序)一组URL参数和图像,以便在服务器(node express)上创建一个帐户。除了保存在服务器上的图像外,其他一切似乎都工作正常,显示为文件类型“数据”,因此不会显示在浏览器中。值得注意的是,我尝试的图像是使用iphone摄像头拍摄的,作为注册表单的一部分。数据发布正确,文件保存正确(名称正确,位置正确),响应正确

关于httpbody,我有什么遗漏吗?这在浏览器和我的android应用程序中都能正常工作,所以我怀疑这可能是swift httpbody或node multer and bodyparser中的某个东西。 任何帮助,或向正确的方向推进都会有帮助,谢谢! ios方法

    var request = NSMutableURLRequest(URL: NSURL(string: (self.url + path) as String)!)
    request.HTTPMethod = "POST"

    var boundary = generateBoundaryString()
    request.setValue(NSString(format: "multipart/form-data; boundary=%@", boundary) as String, forHTTPHeaderField: "Content-Type")

    var body = NSMutableData()
    if data.count > 0  {
        for( key, value ) in data {

            body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
            body.appendData(NSString(format: "Content-Disposition: form-data; name=\"%@\"\r\n\r\n", (key as? String)!).dataUsingEncoding(NSUTF8StringEncoding)!)
            if let string = value as? String {
                body.appendData(NSString(format: "%@\r\n", string).dataUsingEncoding(NSUTF8StringEncoding)!)
            } else if let num = value as? Int {
                body.appendData(NSString(format: "%u\r\n", num).dataUsingEncoding(NSUTF8StringEncoding)!)
            }
        }
    }
    if image != nil {
        var imageData:NSData = NSData(data: UIImageJPEGRepresentation(image!, 1))
        var filename = "profile_\(Int64(NSDate().timeIntervalSince1970*1000)).jpg"
        var mime_type = "image/jpeg"

        body.appendData(NSString(format: "\r\n--%@\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData(NSString(format: "Content-Disposition: form-data; name=\"profile_image\"; filename=\"%@\"\r\n\r\n", filename).dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData(NSString(format: "Content-Type: %@\r\n\r\n", mime_type).dataUsingEncoding(NSUTF8StringEncoding)!)
        body.appendData(imageData)
        body.appendData(NSString(format: "\r\n").dataUsingEncoding(NSUTF8StringEncoding)!)
    }
    body.appendData(NSString(format: "--%@--\r\n", boundary).dataUsingEncoding(NSUTF8StringEncoding)!)
    request.HTTPBody = body

    request.setValue(NSString(format: "%d", body.length) as String, forHTTPHeaderField: "Content-Length")
    return request
接受请求的节点(使用multer和express)


解决方案:

更改此行:

body.appendData(NSString(format: "Content-Disposition: form-data; name=\"profile_image\"; filename=\"%@\"\r\n\r\n", filename).dataUsingEncoding(NSUTF8StringEncoding)!)
为此:

body.appendData(NSString(format: "Content-Disposition: form-data; name=\"profile_image\"; filename=\"%@\"\r\n", filename).dataUsingEncoding(NSUTF8StringEncoding)!)
文件名后面额外的“\r\n”会对文件造成一些混乱,即使内容类型跟在名称后面,而不是图像数据本身

算了吧,4个小时的反复试验,我在发布到SO后10分钟就解决了这个问题

body.appendData(NSString(format: "Content-Disposition: form-data; name=\"profile_image\"; filename=\"%@\"\r\n", filename).dataUsingEncoding(NSUTF8StringEncoding)!)