如何修复下载文件中没有数据

时间:2019-11-01 19:07:27

标签: swift download

确切地说,我正在尝试从服务器下载mp3文件。它下载得很好,而且我认为由于下载文件需要花费时间,因此它确实可以工作。但是,当我尝试将下载的内容输出到文件时,文件大小为0 kb。

public List<Map<String, Object>> demoReadEmail2(String folderName) throws MessagingException,IOException {
    List<Map<String, Object>> myList = new ArrayList<>();
    for (Message message : getUnseenMailsByCurrentDate(folderName)) {
        Map<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("From",message.getFrom()[0]);
        stringObjectHashMap.put("To",Arrays.toString(message.getRecipients(Message.RecipientType.TO)));
        stringObjectHashMap.put("CC",Arrays.toString(message.getRecipients(Message.RecipientType.CC)));
        stringObjectHashMap.put("BCC",Arrays.toString(message.getRecipients(Message.RecipientType.BCC)));
        stringObjectHashMap.put("Subject",message.getSubject());
        myList.add(stringObjectHashMap);
    }
   return myList;
} 

没有错误消息,所以我不知道为什么文件中什么都没有保存。

1 个答案:

答案 0 :(得分:0)

您犯了一个常见错误:

URL(string是文件系统URL的错误API。您必须使用URL(fileURLWithPath

但是,如果始终使用与URL相关的API,则可以避免该错误,并且可以将下载的数据直接保存到磁盘,而无需转换为String并返回到Data

func download(downloadURL: String) {
    DispatchQueue.global().async {
        let saveFileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("/test.mp3")
        let url = URL(string: downloadURL)!
        let task = URLSession.shared.dataTask(with:url) { (data, response, error) in
            if let error = error { print(error); return }
            if (FileManager.default.fileExists(atPath: saveFileURL.path)) {
                do {
                    try FileManager.default.removeItem(at: saveFileURL)
                } catch {
                    print(error)
                }
            }
            do {
                try data!.write(to: saveFileURL)
                print("File saved successfully!")
            } catch {
                print("Something went wrong!", error)
            }
        }
        task.resume()
    }
}
相关问题