Próbuję przesłać plik za pomocą Alamofire
. Przesyłanie działa dobrze, gdy używam File ( NSUrl
), jednak nie mogę dowiedzieć się, jak użyć tej NSData
opcji?
Oto co mam jako test:
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)
}
Otrzymuję kod statusu 415?
Jak mogę przesłać dodatkowe parametry podczas przesyłania?
Dzięki
EDYTOWAĆ
Nie ustawiałem prawidłowego typu treści:
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)
}
Nadal nie mogę dowiedzieć się, jak wysłać dodatkowe parametry wraz z przesyłaniem.
Odpowiedzi:
Oto prosta funkcja, która wymaga docelowego adresu URL przesyłania, parametrów i imageData oraz zwraca URLRequestConvertible i NSData, których Alamofire.upload wymaga do przesłania obrazu z parametrami.
Oto przykład, jak go używać (zobacz UTWÓRZ I WYŚLIJ WNIOSEK):
A jeśli potrzebujesz pliku php dla docelowego adresu URL (z folderem „uploads” w tym samym katalogu):
źródło
Prześlij zdjęcie / plik z parametrami i niestandardowymi nagłówkami za pośrednictwem Swift 3 i 4 oraz Alamofire 4
przez Swift 2 i Alamofire 3
Aktualna szybka wersja: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
źródło
parameters
jest,[String:Any]
ponieważvalue.data(using: .utf8))!
nie jest ważne dlaAny Type
. Czy masz sugestie, jak to rozwiązać?Oto rozwiązanie wykorzystujące Alamofire 3.0 oparte na odpowiedzi antiblanks:
źródło
case .Success(let upload, _, _)
upload
nie mogę znaleźć. Czy coś mi brakuje?encodingResult
toMultipartFormDataEncodingResult
wyliczenie..Success Case
Ma następujące parametry: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Więcupload
to żądanie. Czy dodałeśimport Alamofire
?Udoskonalenie odpowiedzi EdFunke na Swift 2.2 Alamofire 3.3.1
źródło
Przesyłanie wielu części planowane jest do następnej (1.3.0) wersji Alamofire. W międzyczasie, korzystając z informacji zawartych w tym wątku, stworzyłem klasę, która upraszcza przesyłanie plików i włączanie dodatkowych parametrów (zwykłe „dane wejściowe”) do żądania wraz z jednym lub większą liczbą plików. Bez zakładania, że pliki są określonego typu lub użycia routerów.
FileUploader.swift:
Byłoby używane w ten sposób:
Sprawdź lub pobierz z tego sedna: https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
źródło
Kod w odpowiedzi @ antiblank nie działał dla mnie. Wprowadziłem kilka zmian i teraz działa:
POSŁUGIWAĆ SIĘ:
NetData z https://github.com/nghialv/Net/blob/master/Net/NetData.swift
upload.php Kod:
źródło
Krótsza wersja oparta na odpowiedziach @antiblank i @VincentYan.
Klasa
Stosowanie
źródło
Chociaż istnieją inne odpowiedzi, które radzą, jak ręcznie tworzyć żądania wieloczęściowe, możesz po prostu pozostać przy AFNetworking. Mimo że jest napisany w Objective-C, nadal możesz go używać w swoich projektach Swift (zobacz Swift i Objective-C w tym samym projekcie ). W każdym razie kod Swift do przesłania żądania wieloczęściowego za pomocą AFNetworking jest następujący:
Irytujący Xcode ma problemy z rozpoznaniem tego
id<AFMultipartFormData>
parametru,formData
więc nie podoba ci się typowe uzupełnianie kodu edytoraappendPartWithFileData
metody lub jej parametrów, ale po kompilacji i uruchomieniu działa dobrze.źródło
Otrzymujesz 415 z powodu braku typu treści w żądaniu. Poniżej znajduje się całkowite przejście do przesyłania obrazu na Swift 2 i AlamoFire
źródło
Poniżej znajduje się szybki i kod PHP
Kod Swift -> Apple Swift w wersji 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Miejsce docelowe: x86_64-apple-macosx10.9
Kod PHP do pobierania parametrów i pliku
Tutaj Parametry są uchwytami w $ _Request
Pliki są obsługiwane w $ _File
Format w $ _File danych (tablica, słownik lub ciąg) będzie zależeć od żądania po stronie szybkiej, tutaj Zobacz ten wiersz w kodzie
po stronie PHP z nazwą: "imgFiles []" podaje tablicę nazw, formatów i typów
Na przykład
Kod PHP
źródło
Wziąłem odpowiedź antiblank i zawarłem to wszystko w 1 funkcję z obsługą zakończenia. Pomyślałem, że to może być przydatne dla kogoś. Jest trochę „trudniejsza” niż odpowiedź antiblank, ponieważ po prostu pobieram odpowiedź w postaci ciągu znaków z pliku PHP (nie JSON).
Oto jak to nazywasz:
Oto sama funkcja:
A oto plik php.
źródło