在Alamofire上传多张图片

时间:2017-12-17 13:58:44

标签: swift alamofire multipartform-data

我想使用Alamofire将多个图像上传到服务器。

一切正常,但只上传了一张图片。我需要上传多个图像或更多图像,具体取决于登录的用户。我正在使用名为Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Newtonsoft.Json的库来从图库或相机中选择图像。

DKImagePickerController

1 个答案:

答案 0 :(得分:2)

有两种方法可以发送多个文件。

  1. 您可以为每个文件使用唯一的name(在这种情况下,nameimage0image1等等):

    for (index, image) in images.enumerated() {
        multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "image\(index)", fileName: "image\(index).png", mimeType: "image/png")
    }
    

    这导致$_FILES

    $_FILES =     {
        image0 =         {
            error = 0;
            name = "image0.png";
            size = 23578;
            "tmp_name" = "/tmp/php1bc19G";
            type = "image/png";
        };
        image1 =         {
            error = 0;
            name = "image1.png";
            size = 338685;
            "tmp_name" = "/tmp/phpcGS5d6";
            type = "image/png";
        };
    };
    

    (忽略此输出的格式,而只是关注此嵌套目录结构中的键/值组合:就此输出而言,我将Web服务作为JSON发送回$_FILES,I然后让Alamofire解析它,这就是在我的客户端应用程序中输出结果字典的方式。)

  2. 或者,您可以在name之后使用数组,在字段名称后添加[],例如字面image[]

    for (index, image) in images.enumerated() {
        multipartFormData.append(UIImagePNGRepresentation(image)!, withName: "image[]", fileName: "image\(index).png", mimeType: "image/png")
    }
    

    这导致在服务器上收到以下内容:

    $_FILES =     {
        image =         {
            error =             (
                0,
                0
            );
            name =             (
                "image0.png",
                "image1.png"
            );
            size =             (
                23578,
                338685
            );
            "tmp_name" =             (
                "/tmp/phpI4XrwU",
                "/tmp/php3kVhhl"
            );
            type =             (
                "image/png",
                "image/png"
            );
        };
    };
    
  3. 这只取决于Web服务期望创建请求的方式。