Image Upload dauert ewig lange

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Image Upload dauert ewig lange

    Neu

    Hallo,

    ich habe aktuell das Problem das mein Image Upload sehr sehr lange braucht bis das ganze beim Server ankommt. Ich habe bereits meine Internetverbindung geprüft und ein Upload von 5,9 Mbps kann schon mal nicht das Problem sein. Die Bilder sind alle immer so um die 1 Mb groß.

    Kann es eventuell am Server liegen ? Kennt sich jemand vielleicht mit Uploads aus und weiß was in so einem Fall zu tun ist ?

    Ich bin für jeden Ratschlag dankbar, ich weiß nämlich überhaupt nicht wie ich jetzt vorgehen soll.

    Hier mein Code:

    Quellcode

    1. guard let uploadData = try? JSONEncoder().encode(jpegImages) else {return}
    2. var request = URLRequest(url: url)
    3. request.setValue(login_session, forHTTPHeaderField: "Authorization")
    4. request.setValue(questionInputField.text, forHTTPHeaderField: "title")
    5. request.setValue(String(cellPrivacyStatus), forHTTPHeaderField: "private")
    6. request.setValue(categorieName, forHTTPHeaderField: "tag")
    7. request.setValue(String(timePickerValue), forHTTPHeaderField: "expires")
    8. request.httpMethod = "POST"
    9. request.httpBody = uploadData
    10. let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    11. guard let data = data else { return }
    12. do {
    13. self.json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any]
    14. if let parseJSON = self.json {
    15. let session = parseJSON["data"]
    16. print(session as Any)
    17. }
    18. } catch let error {
    19. print(error.localizedDescription)
    20. }
    21. })
    22. task.resume()
    Alles anzeigen


    Hiermit setze ich encode ich meine Bilder in JSON:

    Quellcode

    1. DispatchQueue.main.async {
    2. guard let convertImage = image.key!.jpegData(compressionQuality: 1.0) else {return}
    3. let imageSize: Int = convertImage.count
    4. print("actual size of image in KB: %f ", Double(imageSize) / 1000.0)
    5. self.jpegImages.append(convertImage)
    6. }


    Hiermit fetche ich die Bilder:


    Quellcode

    1. imgManager.requestImage(for: fetchResult.object(at: indexPath.row) , targetSize: CGSize(width: 1080, height: 1920), contentMode: .aspectFill, options: requestOptionsImage, resultHandler: {
    2. image, error in
    3. ...
  • Mac & i Test Abo
  • Neu

    MCDan schrieb:

    Prüfe mal wie große uploadData nach dem Encoding ist.

    Ermittle doch mal die verstrichene Zeit zwischen resume und dem completionHandler Aufruf.
    Größe von uploadData ist nach dem Encoding: 24134.544KB


    Die Zeit beträgt: 0.0005019903182983398 ms

    Ich muss aber sagen das ich erst dann die Ausgabe der Zeit in der Konsole sehen kann wenn das ganze auch beim Server angekommen ist.

    Also rein von den Werten her, sieht doch eigentlich alles recht solide aus oder was würdet ihr sagen ?

    Habe die Zeit so gemessen, hoffe dass das so auch richtig ist:

    Quellcode

    1. guard let uploadData = try? JSONEncoder().encode(jpegImages) else {return}
    2. var request = URLRequest(url: url)
    3. request.setValue(login_session, forHTTPHeaderField: "Authorization")
    4. request.setValue(questionInputField.text, forHTTPHeaderField: "title")
    5. request.setValue(String(cellPrivacyStatus), forHTTPHeaderField: "private")
    6. request.setValue(categorieName, forHTTPHeaderField: "tag")
    7. request.setValue(String(timePickerValue), forHTTPHeaderField: "expires")
    8. request.httpMethod = "POST"
    9. request.httpBody = uploadData
    10. let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    11. let methodStart = NSDate()
    12. guard let data = data else { return }
    13. do {
    14. self.json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any]
    15. if let parseJSON = self.json {
    16. let session = parseJSON["data"]
    17. print(session as Any)
    18. }
    19. } catch let error {
    20. print(error.localizedDescription)
    21. }
    22. let methodFinish = NSDate()
    23. let executionTime = methodFinish.timeIntervalSince(methodStart as Date)
    24. print("Execution time: \(executionTime)")
    25. })
    26. task.resume()
    Alles anzeigen
  • Neu

    Gut das wär sonst recht kurios haha. Ich habe die Zeit jetzt nochmal an anderer Stelle gemessen: 0.24484801292419434
    In dieser Zeit wird der gesamte Code durchgehauen.

    Trotz alldem dauert es nachdem ich auf den Upload Button geklickt habe rund 11 Sekunden bis ich die Antwort vom Server bekomme. Die Antwort bekomme ich sobald die Bilder angekommen sind.

    Kann ich anhand der Zeit also sagen das der Code soweit stimmt und das Problem also woanders liegt, vielleicht beim Server ?

    Hier die aktuelle Zeitmessung:

    Quellcode

    1. let methodStart = NSDate()
    2. guard let uploadData = try? JSONEncoder().encode(jpegImages) else {return}
    3. var request = URLRequest(url: url)
    4. request.setValue(login_session, forHTTPHeaderField: "Authorization")
    5. request.setValue(questionInputField.text, forHTTPHeaderField: "title")
    6. request.setValue(String(cellPrivacyStatus), forHTTPHeaderField: "private")
    7. request.setValue(categorieName, forHTTPHeaderField: "tag")
    8. request.setValue(String(timePickerValue), forHTTPHeaderField: "expires")
    9. request.httpMethod = "POST"
    10. request.httpBody = uploadData
    11. let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    12. guard let data = data else { return }
    13. do {
    14. self.json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any]
    15. if let parseJSON = self.json {
    16. let session = parseJSON["data"]
    17. print(session as Any)
    18. }
    19. } catch let error {
    20. print(error.localizedDescription)
    21. }
    22. })
    23. task.resume()
    24. let methodFinish = NSDate()
    25. let executionTime = methodFinish.timeIntervalSince(methodStart as Date)
    26. print("Execution time: \(executionTime)")
    Alles anzeigen
  • Neu

    24MB Upload für ein Bild. Bist du noch zu retten? Soviel hat ja nicht einmal ein lossless raw formatted image einer Profi Spiegel Reflex Camera.

    Images packt man nicht in ein Json dafür ist das Format überhaupt nicht gemacht. Übertrage das gefälligst als binary wie es sich gehört
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)