当前位置: 首页 > 面试题库 >

Swift 3-Alamofilre 4.0分段图像上传进度

谢鸿飞
2023-03-14
问题内容

我已经完成了图片上传,并使用以下方法将其成功上传到服务器上。

现在,我要上传图像及其进度,因此任何人都可以告诉我该怎么做吗?我发现到处都是,但没有正确的解决方案。

没有进度的图片上传代码:

@IBAction func uploadClick(_ sender: AnyObject) {

    // define parameters
    let parameters = [
        "file_name": "swift_file.jpeg"
    ]

    Alamofire.upload(multipartFormData: { (multipartFormData) in
        multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 0.5)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg")
        for (key, value) in parameters {
            multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
        }
        }, to:"http://server1/upload_img.php")
    { (result) in
        switch result {
        case .success(let upload, _, _):

            upload.responseJSON { response in
                //self.delegate?.showSuccessAlert()
                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization
                //                        self.showSuccesAlert()
                //self.removeImage("frame", fileExtension: "txt")
                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
            }

        case .failure(let encodingError):
            //self.delegate?.showFailAlert()
            print(encodingError)
        }

    }

}

问题答案:

经过大量搜索终于得到了解决方案。我们只需要将uploadProgress块放在结果块中即可。

Alamofire.upload(multipartFormData: { (multipartFormData) in
        multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 0.5)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg")
        for (key, value) in parameters {
            multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
        }
        }, to:"http://server1/upload_img.php")
    { (result) in
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (Progress) in
                print("Upload Progress: \(Progress.fractionCompleted)")
            })

            upload.responseJSON { response in
                //self.delegate?.showSuccessAlert()
                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)   // result of response serialization
                //                        self.showSuccesAlert()
                //self.removeImage("frame", fileExtension: "txt")
                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
            }

        case .failure(let encodingError):
            //self.delegate?.showFailAlert()
            print(encodingError)
        }

    }


 类似资料:
  • 我要哭了,因为我尝试了很多解决方案和话题,但都不起作用。 null 您需要发送一个多部分请求(enctype=“multipart/form-data”)。 所以,有人能请帮助我,为什么我有HTTP 400与上面的错误消息?我可以在代码中更改什么以使此调用工作?谢谢你

  • 我正在使用CKEditor 4.5。2和CKFinder 3.0。PHP5.6上的0。一般来说,集成工作正常-当我单击CKEditor图像按钮时,我可以单击“浏览服务器”按钮,CKFinder打开,我可以选择图像,也可以进行上传。 不起作用的是image2对话框中的“上载”选项卡。我总是收到一个错误,说“请求的资源类型无效。”当我点击“发送到服务器”按钮时。 在我的CKFinder配置中,我定义了

  • 我有以下代码: 美元这个- 没有出现警告/错误,提交成功,但我上传的图像不会显示在文件夹中/uploads/user/“我不知道为什么,我不知道如何检查我的上传路径是否正确。我希望有一些方向。但我确实用相同的代码从不同的函数上传了它的工作和图像显示。 我目前使用localhost。 表格如下:

  • 我正在尝试将一组照片上载到服务器,但请求失败。文件数组到达时总是显示为空。 req.body按预期显示数组。 图像通过Dropzone组件添加。(我尝试将其切换为标准输入,但它们似乎都以相同的方式传递文件) 图像被应用到FormData,名称图像文件在通过设置了多部分/表单数据标题的Axios POST请求发送之前被追加。 一旦传递到服务器,只有req.body似乎包含任何数据,req.files

  • 我在下面有这样的代码 我的目标是使用API上传图像,并获得其上传进度。将图像转换为base 64并插入到

  • 位卡在这个上,需要上传图像和json一起使用多部分形式...不知道如何发送内容类型标头或上传图像...认为我需要转换为blob...目前我只是发送我从文件输入字段中获得的数据。 任何建议都很好谢谢