Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Access,Windev et Swift
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur Access,Windev et Swift
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 43
    Points
    43

    Par défaut Obtenir type et taille fichier distant avec URLsession

    Bonjour,
    je cherche a obtenir le type et la taille d'un fichier localisé sur un serveur avant de decider de le telecharger. Pour cela je voudrais créer une fonction qui me retourne les deux valeurs. J'ai trouvé sur les forums deux fonctions qui permettent chacune de retourner soit le type soit la taille. Le problème est que je n'arrive pas a les combiner en une seule fonction.
    Voici les deux fonctions:
    celle-ci recupere la taille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    func fetchContentLength(for url: URL, completionHandler: @escaping (_ contentLength: Int64?) -> ()) {
        var request = URLRequest(url: url)
        request.httpMethod = "HEAD"
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            guard error == nil,let response = response as? HTTPURLResponse,let contentLength = response.allHeaderFields["Content-Length"] as? String
        else{
                completionHandler(nil)
                return
            }
            completionHandler(Int64(contentLength))
        }
        task.resume()
    }
     
    et celle ci recupere le type :
     
        func getContentType(for url: URL, completionHandler: @escaping (_ contentType: String?) -> ()) {
        var request = URLRequest(url: url)
        request.httpMethod = "HEAD"
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            guard error == nil,let response = response as? HTTPURLResponse,let contentType = response.allHeaderFields["Content-Type"] as? String
                else{
                    completionHandler(nil)
                    return
            }
            completionHandler(contentType)
        }
        task.resume()
    }
    Je ne sais pas comment combiner ces deux fonctions en une seule qui puissent renvoyer directement deux valeurs, le type et la taille.

    Est-ce que quelqu'un pourrait m'aider? SVP

    Cordialement,

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Access,Windev et Swift
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur Access,Windev et Swift
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 43
    Points
    43

    Par défaut

    Bonjour,

    après quelques jours de recherche, voici la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        func getHeaderInformations (myUrl: URL, completion: @escaping (_ content: String?) -> ()) {
            var request = URLRequest(url: myUrl)
            request.httpMethod = "HEAD"
            let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
                guard error == nil, let reponse = response as? HTTPURLResponse, let contentType = reponse.allHeaderFields["Content-Type"],let contentLength = reponse.allHeaderFields["Content-Length"]
     
                    else{
                        completion(nil)
                        return
                }
                let content = String(describing: contentType) + "/" + String(describing: contentLength)
     
                completion(content)
            }
            task.resume()
        }
    L'utilisation est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
               getHeaderInformations(myUrl: item, completion: { content in
     
               print(content ?? 0)
     
                })
    Cela pourrait être utile à quelqu'un...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de taille fichier excel avec POI
    Par stratocasters dans le forum APIs
    Réponses: 0
    Dernier message: 31/03/2010, 19h13
  2. [PHP 4] [PHP 4.4.1] probleme pour lire un fichier distant avec CURL
    Par seben dans le forum Fonctions
    Réponses: 6
    Dernier message: 27/11/2009, 09h38
  3. Réponses: 10
    Dernier message: 22/12/2008, 12h52
  4. [DOM] formulaire + input type file + taille fichier
    Par drob38 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/11/2008, 10h28
  5. Lire un fichier distant avec SSH
    Par Fritzoune dans le forum Fichiers
    Réponses: 3
    Dernier message: 06/09/2006, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo