【问题标题】:Split Data in chunks and upload to server将数据分块并上传到服务器
【发布时间】:2017-09-28 08:14:12
【问题描述】:

我有一个需要上传到服务器的文件,我被告知在上传之前将文件分成多个块。那么问题来了:

1) 我已将文件转换为“数据”类型(字节)。如何将其拆分为每个 1MB 的块?
2)拆分后,如何使用Alamofire上传?如果无法使用 Alamofire,请推荐我该怎么做。

我正在使用 swift 3 和 Code 8.3。非常感谢任何帮助。

【问题讨论】:

标签: ios alamofire swift-data


【解决方案1】:

我认为这可能有效

let path = Bundle.main.url(forResource: "test", withExtension: "png")!
    
do
{
    let data = try Data(contentsOf: path)
    let dataLen = (data as NSData).length
    let fullChunks = Int(dataLen / 1024) // 1 Kbyte
    let totalChunks = fullChunks + (dataLen % 1024 != 0 ? 1 : 0)
        
    var chunks:[Data] = [Data]()
    for chunkCounter in 0..<totalChunks
    {
        var chunk:Data
        let chunkBase = chunkCounter * 1024
        var diff = 1024
        if chunkCounter == totalChunks - 1
        {
            diff = dataLen - chunkBase
        }
            
        let range:Range<Data.Index> = chunkBase..<(chunkBase + diff)
        chunk = data.subdata(in: range)
            
        chunks.append(chunk)
    }
        
    // Send chunks as you want
    debugPrint(chunks)
}
catch
{
    // Handle error        
}

【讨论】:

  • 这个在将 nsdata 拆分为 nsdata 块时工作正常
  • 如果文件很大,它会在let data = try Data(contentsOf: path)这一行崩溃。但是这种方法适用于小文件。
  • 嗨,我在这一行出错:“let range:Range = Range(chunkBase..“' init(_:)' 不可用:CountableRange 现在是 Range。无需再转换“。你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多