下载的文件 MP3 文件通过 Swift 中的 NSURL Session 损坏

Posted

技术标签:

【中文标题】下载的文件 MP3 文件通过 Swift 中的 NSURL Session 损坏【英文标题】:The downloaded file, MP3 File, is damaged through NSURL Session in Swift 【发布时间】:2016-10-29 07:36:24 【问题描述】:

我尝试用 swift 在 iPhone 中下载 mp3 文件。但这些文件有时会损坏。 (由于这个问题,下载的 Mp3 的持续时间发生了变化。所以它无法在 MPmovieplayer 中读取正确的持续时间)我不知道为什么。你能帮我解决问题吗?

func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse)

    self.totalByte = self.totalByte + Double(response.expectedContentLength)
    self.delegate?.onDownLoadStart?(self.fileId,filePath:self.savePath, fileLength: self.totalByte,loadPath:self.filePath, info:self.info!)



func connection(connection: NSURLConnection, didReceiveData data: NSData)

    if(self.isSaved)

        if(self.bigFile == nil)
            if(self.file != nil)
                self.file!.appendData(data)
            

            self.bigFile = NSFileHandle(forUpdatingAtPath: self.savePath)
            self.file = nil
        else
            self.bigFile!.seekToEndOfFile()
            self.bigFile!.writeData(data)

        
        self.progressByte = progressByte + Double(data.length)

    else
        if(self.file == nil)
            self.file = NSMutableData()
        
        self.file!.appendData(data)
        progressByte = Double(file!.length)
    

    self.delegate?.onDownLoadProgress?(self.fileId, progressPct:Float(self.progressByte/self.totalByte))





func connectionDidFinishLoading(connection: NSURLConnection)
    self.delegate?.onDownLoadComplete(self.fileId, filePath:self.savePath, fileData:self.file,loadPath:self.filePath, info: self.info!)
self.removeFileHandle()



private func removeFileHandle()

    bigFile?.closeFile()
    bigFile=nil;
    file=nil;



func connection(connection: NSURLConnection, didFailWithError error: NSError)

    print("DownLoader path="+self.filePath+" errorCode="+error.code.description);
    self.removeFileHandle()

    self.delegate?.onDownLoadError?(self.fileId,filePath:self.savePath, withError:error)



【问题讨论】:

【参考方案1】:

你试过 Alamofire 吗?我强烈建议将此 pod 用于任何 HTTP 请求/下载。 例子: Alamofire.download() method: Where is the file and did it save successfully?

【讨论】:

以上是关于下载的文件 MP3 文件通过 Swift 中的 NSURL Session 损坏的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中从服务器流式传输 mp3 文件

swift 录制多个音频 并将音频转换为mp3 并合成多个mp3文件为一个文件

从带有 URL 的 mp3 文件中获取元数据(swift)

使用 AVAudioPlayer 在 Swift 中播放远程 mp3 文件

尝试下载通过 YouTube-to-MP3 API 生成的 MP3,但我得到的只是一个 0 字节的 MP3 文件

Swift 4 音频与 Whatsapp 共享