Alamofire Swift: загрузить файл размером более 10 Мб? - PullRequest
0 голосов
/ 22 октября 2018

Я создаю социальное приложение с возможностью публиковать и прикреплять изображения и видео.

Я заметил, что если я попытаюсь загрузить тяжелые файлы, то PHP не получит некоторые параметры (userId и session, например).

Alamofire позволяет загружать только 10 МБ файла без потока.

Мой вопрос: как мне переписать этот код вбыть в состоянии загружать больше изображений / видео одновременно весом более 10 МБ?

Вот код для публикации:

func post(message: String, type: Int, duration: Int, pickedFiles: [Any], completion: @escaping (ActionResult?, Int?, String?, Int?, Int?, String?)->()){

        var pickedVideoUrls : [URL] = []
        var pickedImages : [UIImage] = []
        for file in pickedFiles {
            if let image = file as? UIImage {
                pickedImages.append(image)
            } else if let videoUrl = file as? URL {
                pickedVideoUrls.append(videoUrl)
            }
        }
        let userId = UserData.shared.details.userId
        let session = UserData.shared.details.session

        if (latitude == nil || longitude == nil){
            return completion(ActionResult(type: 0, title: NSLocalizedString("error", comment: ""), message: NSLocalizedString("err_locServicesFail", comment: "")), nil, nil, nil, nil, nil)
        }

        let connectUrl = URL(string: appSettings.url + "/src/main/post.php")



        Alamofire.upload( multipartFormData: { multipartFormData in
            multipartFormData.append("\(userId)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "userId")
            multipartFormData.append(session.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "session")
             multipartFormData.append(message.data(using: String.Encoding.utf8, allowLossyConversion: true)!, withName: "message")
             multipartFormData.append("\(type)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "type")
             multipartFormData.append("\(duration)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName: "duration")

            // Now upload the videos & images
            var fileNumber = 0
            for file in pickedFiles {
                if let image = file as? UIImage {
                    let imgData = UIImageJPEGRepresentation(image, 0.2)!
                    multipartFormData.append(imgData, withName: "image[]", fileName: "file.\(fileNumber).png", mimeType: "image/png")
                    fileNumber+=1
                } else if let videoUrl = file as? URL {
                    multipartFormData.append(videoUrl, withName: "video[]", fileName: "file.\(fileNumber).mp4", mimeType: "video/mp4")
                    fileNumber+=1
                }
            }



        }, to: connectUrl!, encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in
                    // EVERYTHING WAS FINE
                }
            case .failure(let encodingError):

                // ERROR
            }
        })
    }

Если я загружаю небольшие файлы<10 Мб работает нормально. </p>

ОБНОВЛЕНИЕ 1

Это из-за ограничения размера Alamofire:

MAhipal Singh предположил, что с Stream это можетбыть решенным: Alamofire загрузить огромный файл

Но я не очень понимаю это ..

1 Ответ

0 голосов
/ 25 октября 2018

Не видя кодов ошибок, трудно сказать, однако я уверен, что ограничение находится в вашей настройке php, проверьте ваш php.ini для загрузки максимального размера файла и, возможно, опубликуйте значения максимального размера.Вы обнаружите, что это, скорее всего, 10 МБ.

Увеличение этого значения будет работать, но я предлагаю вам больше изучить, как это повлияет на ваш сервер.

...