php - Alamofire Swift:上传超过 10mb 的文件?
问题描述
我正在制作一个能够发布和附加图像和视频的社交应用程序。
我注意到如果我尝试上传大量文件,那么 PHP 将不会获得一些参数(userId
例如session
)。
Alamofire 只允许在没有流的情况下上传 10mb 的文件。
我的问题是,我如何重写此代码以便能够同时上传更多的图像/视频,总重超过 10mb?
这是发布的代码:
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
}
})
}
如果我上传 <10mb 的小文件,它可以正常工作。
更新 1
这是因为 Alamofire 的大小限制:
MAhipal Singh 建议使用 Stream 可以解决:Alamofire upload huge file
但是我真的不明白。。
解决方案
没有看到错误代码很难说,但是我确定限制在您的 php 设置中,请检查您php.ini
的上传最大文件大小,并可能发布最大大小值。你会发现它很可能是 10 mb。
将其提高到更高的值会起作用,但我建议您对这将如何影响您的服务器进行更多研究。
推荐阅读
- java - Android 在特定时间通过服务获取 GPS 位置
- vba - 如何在将值添加到下一个可用行之前循环一个值的范围
- android - java.lang.RuntimeException:无法获取提供者 mono.android.MultiDexLoader
- ssis - Kingswaysoft SSIS 创建联系人慢
- oracle - Oracle 12c 的默认登录密码是什么?
- neural-network - 为我的 CNN 选择最佳池化类型
- macos - 以编程方式将 Web 应用程序快捷方式添加到 macOS Dock
- c# - 使用 ModelStoreConatiner 名称作为 Schema 对特定表查询 db 的 EF 查询
- assembly - 我应该使用哪个汇编程序在 dosbox 中编译此代码
- javascript - 需要帮助在函数中更改 SVG 的颜色 - Skycons