スイフト3とアラモファイア4を使用しています。私はforループの中に6つの画像をアップロードしたいが、alamofireのアップロード要求は非同期で実行する。それは、まずループのために実行され、次にアップロードされます。しかし、私は応答を得てから次にアップロードするまで待っています。これどうやってするの?alamofireで画像をアップロードするにはどうすればいいですか?
0
A
答えて
0
画像のアップロードを順次実行するには、DispatchQueue
のシリアル番号を使用する必要があります。シリアルキューは一度に1つの要求だけが実行されることを保証し、次の要求は前の要求が実行を終了したときにのみ開始します。
let serialQueue = DispatchQueue(label: "serialQueue")
for image in images {
serialQueue.async{
//upload image with Alamofire here
}
}
0
モデルクラス
class MultipartUpdataData: NSObject
{
var mediaData:Data!
var mediaUploadKey:String!
var fileName:String!
var mimeType:String!
override init()
{
}
required init(coder aDecoder: NSCoder) {
if let mediaData = aDecoder.decodeObject(forKey: "mediaData") as? Data {
self.mediaData = mediaData
}
if let mediaUploadKey = aDecoder.decodeObject(forKey: "mediaUploadKey") as? String {
self.mediaUploadKey = mediaUploadKey
}
if let fileName = aDecoder.decodeObject(forKey: "fileName") as? String {
self.fileName = fileName
}
if let mimeType = aDecoder.decodeObject(forKey: "mimeType") as? String {
self.mimeType = mimeType
}
}
open func encodeWithCoder(_ aCoder: NSCoder)
{
if let mediaData = self.mediaData{
aCoder.encode(mediaData, forKey: "mediaData")
}
if let mediaUploadKey = self.mediaUploadKey {
aCoder.encode(mediaUploadKey, forKey: "mediaUploadKey")
}
if let mimeType = self.mimeType {
aCoder.encode(mimeType, forKey: "mimeType")
}
if let fileName = self.fileName {
aCoder.encode(fileName, forKey: "fileName")
}
}
}
画像をアップロード、まず、次に以下のようにこの関数を呼び出して、配列に画像データを追加してください: -
var uploadMediaList = [MultipartUpdataData]()
for loop{
let multiObject = MultipartUpdataData()
multiObject.mediaData = self.pngImageData!
multiObject.mimeType = "image/png"
multiObject.mediaUploadKey = "profile_pic" //Replace this key with your existing key.
let profileFilename = self.filename(Prefix: "profile", fileExtension: "png")
multiObject.fileName = profileFilename
uploadMediaList.append(multiObject)
}
self.upload(uploadMediaList)
func upload(multipartImages:[MultipartUpdataData]){
let parameters:[String:String] = ["key":"value"]
Alamofire.upload(
multipartFormData: { multipartFormData in
for mData in multipartImages!{
let pngImageData = mData.mediaData
let uploadfileNamekey = mData.mediaUploadKey
let fileName = mData.fileName!
let mimeType = mData.mimeType!
multipartFormData.append(pngImageData!, withName: uploadfileNamekey!, fileName: fileName, mimeType: mimeType)
}
for (key, value) in parameters {
multipartFormData.append(value.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue), allowLossyConversion: true)!, withName: key)
}
},
to: "\(url)",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
let json = JSON(data: response.data!)
print("SUCSESS")
}
case .failure(let encodingError):
print("ERORR")
}
}
)
}
//MARK:-filename-
func filename(Prefix:String , fileExtension:String)-> String
{
let dateformatter=DateFormatter()
dateformatter.dateFormat="MddyyHHmmss"
let dateInStringFormated=dateformatter.string(from: NSDate() as Date)
return NSString(format: "%@_%@.%@", Prefix,dateInStringFormated,fileExtension) as String
}
関連する問題
- 1. ギャラリーからパースサーバーに画像をアップロードするにはどうすればいいですか?ここで
- 2. REST API経由でLinkedInに動画や画像をアップロードするにはどうすればよいですか?
- 3. PCから画像をアップロードしてキャンバスに描画するにはどうすればよいですか?
- 4. Facebook Android AndroidでFacebook壁に画像をアップロードするにはどうすればいいですか?
- 5. Djangoで枕カバーの画像をS3にアップロードするにはどうすればいいですか?
- 6. アップロードされている画像の名前を変更するにはどうすればよいですか?
- 7. Alamofireマルチパートの画像アップロードは、私がAlamofireで画像をアップロードするマルチパートを使用
- 8. 私のユーザが画像を電子メールでアップロードするにはどうすればいいですか?[Django]
- 9. オリンパスのネイティブ画像と動画をGoogleフォトにアップロードするにはどうすればよいですか?
- 10. divにアップロードされた画像のプレビューを合わせるにはどうすればいいですか?
- 11. Javaで画像をジャンプするにはどうすればいいですか
- 12. HTMLで画像をアップロードし、JSでサイトでプレビューするにはどうすればよいですか?
- 13. MultiFormDataでAlamofireで画像をアップロード
- 14. Sails.jsアップロード後に画像の名前を取得するにはどうすればいいですか
- 15. 複数の画像をサーバーにアップロードするにはどうすればいいですか
- 16. ファイルシステムへのアップロード時点で同じ画像名を避けるにはどうすればいいですか?
- 17. アップロードした画像をPhoenixとArcで置き換えるにはどうすればいいですか?
- 18. Gitリポジトリで画像を扱うにはどうすればいいですか?
- 19. PHP&MYSQL - 画像データはどうすればいいですか?
- 20. ビデオに画像をオーバーレイするにはどうすればいいですか?
- 21. vueコンポーネントのリンクに画像をアップロードするにはどうすればよいですか?このような
- 22. アンドロイドでGoogle Cloud Storageに画像をアップロードするにはどうすればよいですか?
- 23. 特定のファイル名でサーバーに画像データをアップロードするにはどうすればよいですか?
- 24. 流星でサーバーに画像をアップロードするにはどうすればよいですか?
- 25. Swift 3とバックエンドレス - 画像をアップロードするにはどうすればいいですか?
- 26. テキストポストの画像をアップロードするにはどうすればいいですか?AJAX、php、html
- 27. Djangoテンプレートのユーザーがアップロードしたプロフィール画像(ImageField)にリンクするにはどうすればいいですか?
- 28. Tkinterを使用してPythonで画像をアップロードするにはどうすればよいですか?
- 29. 画像を再生するにはどうすればいいですか?
- 30. デバイスからバックエンドサーバーに画像をアップロードするにはどうすればよいですか?
FYI Alamofireはのために非同期的に実行理由。アップロード(または実際にはネットワークリクエスト)を同期して実行しようとするのは、ほとんどの場合設計上の決定が悪いことです。 – deadbeef
ネットワーク接続が弱すぎて一度に複数のアップロードを処理することができないと心配している場合は、別の方法があります(Alamo Fire 'SessionManager'と' URLSessionConfiguration'には ' httpMaximumConnectionsPerHost'プロパティ。 – deadbeef