【问题标题】:SwiftUI download CSV from Web and got data into an arraySwiftUI 从 Web 下载 CSV 并将数据放入数组中
【发布时间】:2022-11-21 18:51:03
【问题描述】:

我正在尝试从我自己的应用程序 Web 服务器下载 CSV 文件以存储在数组中。 CSV 包含我的应用程序的所有图像 URL,还包含图像名称、纬度和经度。他定期更新,格式如下:

Name;URL;Latitude;Longitude

CSV 网址是:http://apps.e-rochoise.fr/ressources/imageTest.csv

我想将它添加到一个数组中,其中 Name 是 String,URL 是 URL,Latitude 和 longitude 是 Double。

我正在尝试执行此代码以将我的 CSV 下载到本地文件夹中。此代码第一次运行,但当我重新调用我的函数时,我无法覆盖新的 CSV。

func downloadCsvFromURL(){

let documentsUrl:URL =  (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL?)!

    
    let destinationFileUrl = documentsUrl.appendingPathComponent("FR_Airports.csv")
    
    let fileURL = URL(string: "https://apps.e-rochoise.fr/ressources/imageTest.csv")
    
    let sessionConfig = URLSessionConfiguration.default
    let session = URLSession(configuration: sessionConfig)
 
    let request = URLRequest(url:fileURL!)
    
    let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
        if let tempLocalUrl = tempLocalUrl, error == nil {
            if let statusCode = (response as? HTTPURLResponse)?.statusCode {
                print("Successfully downloaded. Status code: \(statusCode)")
            }
            
            do {
                try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl)
            } catch (let writeError) {
                print("Error creating a file \(destinationFileUrl) : \(writeError)")
            }
            
        } else {
            print("Error" )
        }
    }
    task.resume()

}

现在我不知道如何定义我的数组以在所有应用程序中访问...

谢谢你的帮助 !!

【问题讨论】:

    标签: arrays csv url swiftui download


    【解决方案1】:

    与其使用 downloadTask 加载和移动数据,我建议使用 dataTask 加载数据并将其直接写入目标。好处是 write(toData 覆盖现有文件。

    URLRequest 和自定义——实际上是默认的——不需要会话配置

    func downloadCsvFromURL() {
        
        let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let destinationFileUrl = documentsUrl.appendingPathComponent("FR_Airports.csv")
        let fileURL = URL(string: "https://apps.e-rochoise.fr/ressources/imageTest.csv")!
      
        let task = URLSession.shared.dataTask(with: fileURL) { (data, response, error) in
            if let data = data {
                if let statusCode = (response as? HTTPURLResponse)?.statusCode {
                    print("Successfully downloaded. Status code: (statusCode)")
                }
                
                do {
                    try data.write(to: destinationFileUrl)
                } catch  {
                    print("Error creating a file (destinationFileUrl) : (error)")
                }
            } else {
                print(error!)
            }
        }
        task.resume()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多