Saya mencoba mengunggah file menggunakan Alamofire
. Unggahan berfungsi dengan baik saat menggunakan File (NSUrl
), namun, sepertinya saya tidak tahu cara menggunakan NSData
opsi ini?
Inilah yang saya miliki sebagai ujian:
var url:NSURL = NSURL.URLWithString("http://localhost:8080/bike.jpeg")
var err: NSError?
var imageData :NSData = NSData.dataWithContentsOfURL(url,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
Alamofire.upload(.POST, "http://localhost:8080/rest/service/upload/test.png", imageData)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println(totalBytesWritten)
}
.responseJSON { (request, response, JSON, error) in
println(request)
println(response)
println(JSON)
}
Saya mendapatkan kode status 415?
Selain itu, bagaimana saya dapat mengirim parameter tambahan dalam unggahan?
Terima kasih
EDIT
Saya tidak menyetel Jenis Konten yang benar:
var manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = ["Content-Type": "application/octet-stream"]
let imageData: NSMutableData = NSMutableData.dataWithData(UIImageJPEGRepresentation(imageTest.image, 30));
Alamofire.upload(.POST, "http://localhost:8080/rest/service/upload?attachmentName=file.jpg", imageData)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println(totalBytesWritten)
}
.responseString { (request, response, JSON, error) in
println(request)
println(response)
println(JSON)
}
Masih tidak tahu cara mengirim parameter tambahan bersama dengan unggahan.
Jawaban:
Berikut adalah fungsi sederhana yang membutuhkan target upload url, parameter, dan imageData dan mengembalikan URLRequestConvertible dan NSData yang dibutuhkan Alamofire.upload untuk mengupload gambar dengan parameter.
Berikut adalah contoh cara menggunakannya (lihat BUAT DAN KIRIM PERMINTAAN):
Dan jika Anda membutuhkan file php untuk url target (dengan folder 'unggah' di direktori yang sama):
sumber
Unggah Foto / File dengan parameter dan tajuk khusus melalui Swift 3 & 4 dan Alamofire 4
melalui Swift 2 dan Alamofire 3
Versi cepat saat ini: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
sumber
parameters
ini[String:Any]
karenavalue.data(using: .utf8))!
tidak berlaku untukAny Type
. Apakah Anda punya saran bagaimana mengatasi ini?Berikut adalah Solusi menggunakan Alamofire 3.0 berdasarkan jawaban antiblanks:
sumber
case .Success(let upload, _, _)
upload
tidak dapat menemukan. Apakah saya melewatkan sesuatu?encodingResult
adalahMultipartFormDataEncodingResult
enum. Ini.Success Case
memiliki parameter berikut: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Begituupload
juga dengan Permintaan. Apakah Anda menambahkanimport Alamofire
?Meningkatkan jawaban EdFunke untuk Swift 2.2 Alamofire 3.3.1
sumber
Unggahan multi-bagian dijadwalkan untuk disertakan dengan rilis Alamofire (1.3.0) berikutnya. Sementara itu, dengan menggunakan informasi di utas ini, saya telah membuat kelas yang menyederhanakan pengunggahan file dan menyertakan parameter tambahan ("input" biasa) dalam permintaan bersama dengan satu atau lebih file. Tanpa berasumsi bahwa file dari jenis tertentu atau penggunaan Router.
FileUploader.swift:
Ini akan digunakan seperti ini:
Lihat atau unduh dari inti ini: https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
sumber
Kode di jawaban @ antiblank tidak berfungsi untuk saya. Saya telah membuat beberapa perubahan dan sekarang berfungsi:
MENGGUNAKAN:
NetData dari https://github.com/nghialv/Net/blob/master/Net/NetData.swift
Kode upload.php:
sumber
Versi yang lebih pendek berdasarkan jawaban @antiblank dan @VincentYan.
Kelas
Pemakaian
sumber
Meskipun ada jawaban lain yang menyarankan cara membuat permintaan multi bagian secara manual, Anda mungkin ingin tetap menggunakan AFNetworking. Meskipun ditulis dalam Objective-C, Anda masih bisa menggunakannya di proyek Swift Anda (lihat Swift dan Objective-C di Proyek yang Sama ). Bagaimanapun, kode Swift untuk mengirimkan permintaan multi bagian menggunakan AFNetworking adalah sebagai berikut:
Xcode mengganggu memiliki masalah mengenali
id<AFMultipartFormData>
parameter iniformData
, jadi Anda tidak menikmati penyelesaian kode editor khas dariappendPartWithFileData
metode atau parameternya, tetapi ketika Anda mengkompilasinya, dan menjalankannya, itu berfungsi dengan baik.sumber
Anda mendapatkan 415 karena kehilangan tipe konten dalam permintaan Anda. Di bawah ini adalah total soution untuk upload gambar di Swift 2 dan AlamoFire
sumber
Di bawah ini adalah Swift dan Kode Php
Kode Swift -> Apple Swift versi 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Kode PHP untuk Mendapatkan Parameter dan File
Berikut Parameter Ditangani dalam $ _Request
Dan File ditangani di $ _File
Format dalam $ _File data (Array, Dictionary atau String) akan bergantung pada Request in swift side, Disini Lihat baris ini dalam kode
di sisi Php withName: "imgFiles []" memberikan array nama, format, Type
Misalnya
Kode PHP
sumber
Saya mengambil jawaban antiblank dan membungkus ini semua menjadi 1 fungsi dengan penangan penyelesaian. Pikir itu mungkin berguna untuk seseorang. Ini sedikit 'lebih kasar' daripada jawaban antiblank karena saya hanya mengambil respons string dari file PHP (bukan JSON).
Begini cara Anda menyebutnya:
Berikut fungsinya sendiri:
Dan ini file phpnya.
sumber