当前位置: 首页 > 知识库问答 >
问题:

在swift 4的alamofire 4中使用multipart上传图像和多个参数

蒯胜泫
2023-03-14

我试图上传图像与多个参数使用阿拉莫菲尔多部分与swift 4,但我不能上传图像成功,我得到的回应如下

{
  "error" : "error uploading file, please retry"
}

这是我在上传按钮事件中调用的函数

// selectedLogo = (info["UIImagePickerControllerOriginalImage"] as? UIImage)!
let imageData = UIImageJPEGRepresentation(selectedLogo, 1.0)
let parameters: Parameters = ["id": strUserId,
                              "telephone": self.txtTelephoneNumber.text!,
                              "email": self.txtEmail.text!,
                              "notice":self.txtNotices.text!,
                              "status" : userData["status"]]

print(parameters)

Alamofire.upload(multipartFormData: { (multipartFormData) in
    if let data = imageData{
        multipartFormData.append(data, withName: "club_image", fileName: "file.jpg", mimeType: "image/jpg")
    }
    for (key, value) in parameters {
        multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!,withName: key as String)

    }
}, to:"\(self.app.strBaseAPI)updatedata.php")
{ (result) in
    switch result {
    case .success(let upload, _, _):
        upload.uploadProgress(closure: { (progress) in
            //Print progress
            print(progress)
        })
        upload.validate()

        upload.responseJSON { response in
            if response.response?.statusCode == 200
            {
                if response.result.isSuccess == true
                {
                    if let value = response.result.value
                    {
                        self.json = JSON(value)
                        print(self.json)

                        let strStatus : String = self.json["success"].stringValue
                        if strStatus == "true"
                        {
                            Toast(text: strStatus).show()
                        }else{
                            Toast(text: strStatus).show()
                        }
                    }else{
                        Toast(text: "Something wrong").show()
                    }
                }else{
                    Toast(text: "Something wrong").show()
                }
            }else{
                SVProgressHUD.dismiss()
                Toast(text: "Something wrong").show()
            }
        }

    case .failure(let encodingError):
        //print encodingError.description
        print(encodingError.localizedDescription)
    }

当我转换图像使用UIImagePNG表示与相同的方法只是改变一行

MultipartFormData.append(ImageData!,带名称:图像,文件名:image.png,mimeType:图像/png)

它会给我这样的感觉

SUCCESS: {
    error = "error data post";
}

请帮帮我!!

共有1个答案

潘高岑
2023-03-14

因此,错误来自服务器端,图像的大小限制非常小,这就是它们不保存的原因。尝试从更新JPEG图像的压缩

if  let imageData = UIImageJPEGRepresentation(selectedLogo, 1)

if  let imageData = UIImageJPEGRepresentation(selectedLogo, 0.6)

希望这对你有帮助。

 类似资料:
  • 问题内容: 我在解析viewset中的 request.data 时遇到问题。我有一个可以根据产品添加多个图像的模型。 我想从传入数据中拆分 图像 ,将 产品数据 发送到ProductSerializer,然后将 图像 与 产品数据 发送到其序列化 器 并保存。 我有两个模型,就像这样: 我要发送到 产品 的请求(127.0.0.1:8000/products/)就像这样: 序列化器没有什么特别的

  • 清单权限 Android显示器输出

  • 我的代码: 我使用map是因为@PartMap注释--我想上传多个文件。我的服务器返回http代码200,但没有上传任何文件。Api调用已经过测试--如果我们的web应用程序使用它,它可以正确工作。你知道我做错了什么吗

  • 问题内容: 使用AJAX上传多张图片时遇到很多问题。我写这段代码: 的HTML jQuery / AJAX 我尝试了各种版本,但从未成功通过ajax发送多个数据。我已经按照这种方式尝试了以上所见,现在我仅获得POST信息。我知道为什么会收到POST,但我需要发送FILES信息,而且我不知道我哪里写错了。 我不是第一次使用Ajax,经常在大多数项目中使用它,但是我从未使用过发送多个文件,这现在困扰着

  • 问题内容: 我只想使用swift在firebase上上传多个图像。我现在正在上传一张图片,但无法上传多张图片。这是我的代码 问题答案: 当前没有直接API可以批量上传/下载文件。我们不能使用循环,因为所有任务都执行。我们可以做的是使用递归函数。 核心逻辑 完整代码示例 1.我创建了一个自定义类来上传文件 2.在这里我们如何使用 首先,为主要功能创建一个完成块,当您成功上传所有图像时,它将通知您。

  • 问题内容: 我试图在数据库表的一行中上传多个图像并在显示页面中访问它们。我已经尝试过本教程: laraveldaily.com/upload-multiple- files-laravel-5-4/, 但是有两个不同的表建立关系。 我希望这在单个表中发生。 问题答案: 这是最适合我的: 首先以您的形式执行此操作: 这是多项选择: 现在在您的控制器中执行以下操作: 希望这行得通