【问题标题】:Best way to upload multiple images in a single batch批量上传多张图片的最佳方式
【发布时间】:2018-09-21 08:58:40
【问题描述】:

我试图在一个批次中上传多个图像,我将图像转换为 base64 字符串,将它们附加到 json 中并发送。但是当我附加超过 3 或 4 个图像时,由于某种原因,服务器会为 json 获取 null。我认为这是因为 base64 字符串的长度很大。

我的要求是这样的,我想上传多张图片,这些图片都在一个上传 ID 下,并且每张图片都应该有自己的标签。

我的json是这样的

{ 
    "upload_id":[{
                   "tag1.tag2": "base64 string of image 1"
                 },
                 {
                   "tag3.tag4": "base64 string of image 2"
                 }]
} 

这是我用来制作 json 和上传的代码

// Images are saved in the documents directory, image paths are saved in imgPathsArr array and tags are saved in tagsArr.

var uploadDict = [String: Any]()
var imgDictArr = [[String: Any]]()

for (indx,imgPath) in imgPathsArr.enumerated(){
    do{
        let imgData = try Data(contentsOf: URL(fileURLWithPath: imgPath))
        let base64Str = imgData.base64EncodedString(options: .init(rawValue: 0))
        let imageDict = [tagsArr[index]:base64Str]
        imgDictArr.append(imageDict)
    }catch let error{
        print(error.localizedDescription)
    }        
}

uploadDict[nic!] = imgDictArr

Alamofire.request("url", method: .post, parameters: uploadDict, encoding: JSONEncoding.default, headers: nil).response { (response) in

    //things after getting response 
}

任何可能的方式来完成我的工作。任何帮助将不胜感激。

【问题讨论】:

  • 不要使用base64发送。使用分段上传。最好创建一个压缩单个文件并一次上传。甚至你也可以为它创建一个后台会话。

标签: ios json swift image-uploading


【解决方案1】:

Multipart 比以 base64 之类的纯二进制到文本形式发送要好。在多部分请求中,客户端构造请求以将文件和数据发送到 HTTP 服务器。浏览器和 HTTP 客户端通常使用它来将文件上传到服务器。

下面有一个链接,它更详细地介绍了 Multipart:

https://stackoverflow.com/a/19712083/7461562

【讨论】:

  • @Al.G.IMHO,这确实是一个答案,而且它是正确的,尤其是因为它提供了如何解决问题的有用提示。事实证明,可行的解决方案可能会变得更加复杂。但是,答案并没有提供“复制和粘贴”解决方案 - 恕我直言,这不应成为足够答案的标准,因为这些解决方案通常对于更复杂的解决方案是不够的。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多