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

上传带有参数的图像(alamofire)

林和畅
2023-03-14

我试图使用AlamoFire将图像(avatarImage)作为formData参数类型上载到服务器,但每次我尝试发布时都会生成一个“数据无法读取,因为它的格式不正确”错误。我不太清楚我做错了什么。

class func createTeamWithAvatar(avatarImage: Image) {
    let extendedURI = "\(RequestManager.baseURL)" + "\(RequestManager.ClickUpURI.Team.rawValue)"
    RequestManager.sharedAlamofireManager.upload(multipartFormData: {
        multipartFormData in

        //This generates an error: "The data could not be read because it isn’t in the correct format"
        if let imageData = UIImageJPEGRepresentation(avatarImage, 1) {
            multipartFormData.append(imageData, withName: "avatar", mimeType: "image/jpeg")
        }

        }, to: extendedURI,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON {
                        response in

                        if let statusCode = response.response?.statusCode,
                            let response = response.result.value as? Dictionary<String, AnyObject>,
                            let _ = response["id"] as? String
                            , statusCode == 200
                        {
                            completionHandler(response, nil)
                        } else {
                            let responseError = response.result.value as? Dictionary<String, AnyObject>

                            let errorInfo = responseError ?? ["err" : "Unexpected media uploading error" as AnyObject]
enter code here
                            let error = response.result.error ?? RequestManager.makeError(response.response?.statusCode ?? 500, userInfo: errorInfo)
                            completionHandler(nil, error as NSError?)
                        }
                    }
                default:
                    completionHandler(nil, RequestManager.makeError(500, userInfo: ["err" : "Multipart encoding failed" as AnyObject]))
                }
        })
    }

PS:我正在使用multipartFormData上载b/c,我还需要发送一些其他参数(一旦我能够上载图像)。

共有2个答案

长孙弘壮
2023-03-14

我必须添加.httpAdditionalHeaders b/c我的服务器需要某些数据:

RequestManager.sharedAlamofireManager.session.configuration.httpAdditionalHeaders = ["Accept": "application/json", "Content-Type": "multipart/form-data"]

您可以通过将键/值对附加到此数组来添加更多配置。

寿鸣
2023-03-14

你应该用

multipartFormData.append(paramData, withName: "paramName")

在字符串参数的情况下,您应该将字符串转换为数据

data = string.data(using: String.Encoding.utf8)!
multipartFormData.append(data, withName: "stringParamName")

完整代码

   RequestManager.sharedAlamofireManager.upload(multipartFormData: {
    multipartFormData in

    //This generates an error: "The data could not be read because it isn’t in the correct format"
    if let imageData = UIImageJPEGRepresentation(avatarImage, 1) {
        multipartFormData.append(imageData, withName: "avatar", mimeType: "image/jpeg")
    }
    data = string.data(using: String.Encoding.utf8)!
    multipartFormData.append(data, withName: "stringParamName")

   //..... 
 类似资料:
  • 我认为我对保存的UIIimage的路径有一些问题,因为php告诉我该文件已经存在,我认为这是因为我以空白方式发送它

  • 我正在使用Alamofire向服务器发送数据。我有一个图像,我想上传到服务器的数据形式与一些其他参数。在Alamofire中,我使用multipartFormData方法发布所有参数和图像。服务器需要数据为JSON格式,参数如下所示: 我正在努力,但它给了我一个失败的回应。以下是我在swift中与alamofire合作的代码: 我的服务器接受BLOB数据中的映像。如果有人能帮我。非常感谢。

  • 问题内容: 我正在尝试在Swift中上传带有参数的图像。当我尝试此代码时,我可以获取参数,但不能获取图像 编辑2: 我认为保存的UIImage的路径存在一些问题,因为php告诉我该文件已经存在,这是因为我将其发送为空白 问题答案: 在下面的评论中,您告知我们您正在使用语法来检索文件。这意味着您要创建一个请求。该过程基本上是: 为您的请求指定边界。 指定请求的一个,以指定该请求及其边界。 创建请求正

  • 我正在用Swift开发一个iPhone应用程序。我正在使用Alamofire框架来处理http请求。我将用于POST,GET等,如下所示: 我使用将图像上载到服务器: 谁能帮我解决这个问题? 谢谢!:)

  • 我正试图使用阿拉莫菲尔上传文件。使用文件()时,上传效果很好,但是,我似乎不知道如何使用选项? 这是我的测试: 我的状态代码是415? 此外,如何在上传中发送其他参数? 谢啦 编辑 我没有设置正确的内容类型: 仍然不知道如何发送附加参数随上传。

  • 现在,为了访问我的NodeJS中的这些值,我正在执行以下操作: 如何访问图像和键值? 还查看了express-fileupload节点模块为我完成这项工作。 null 我是不是漏掉了什么?请帮忙。谢了。