Estou tentando fazer upload de um arquivo usando Alamofire
. O upload funciona bem ao usar um File ( NSUrl
), no entanto, não consigo descobrir como usar a NSData
opção?
Isso é o que tenho como teste:
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)
}
Estou recebendo um código de status 415?
Além disso, como posso enviar parâmetros adicionais no upload?
obrigado
EDITAR
Eu não estava definindo o tipo de conteúdo correto:
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)
}
Ainda não consigo descobrir como enviar parâmetros adicionais junto com o upload.
Respostas:
Esta é uma função simples que requer o URL de upload de destino, parâmetros e imageData e retorna o URLRequestConvertible e NSData que Alamofire.upload requer para fazer upload de uma imagem com parâmetros.
Aqui está um exemplo de como usá-lo (consulte CRIAR E ENVIAR PEDIDO):
E se você precisar do arquivo php para a url de destino (com uma pasta de 'uploads' no mesmo diretório):
fonte
Carregar foto / arquivo com parâmetros e cabeçalhos personalizados via Swift 3 e 4 e Alamofire 4
via Swift 2 e Alamofire 3
Versão swift atual: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
fonte
parameters
for[String:Any]
porquevalue.data(using: .utf8))!
não é válido paraAny Type
. Você tem alguma sugestão de como resolver isso?Aqui está uma solução usando Alamofire 3.0 com base na resposta antiblanks:
fonte
case .Success(let upload, _, _)
upload
não consigo encontrar. Estou esquecendo de algo?encodingResult
é umMultipartFormDataEncodingResult
enum. O.Success Case
tem os seguintes parâmetros: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Entãoupload
é uma solicitação. Você adicionouimport Alamofire
?Melhorando a resposta de EdFunke para Swift 2.2 Alamofire 3.3.1
fonte
O upload de várias partes está programado para ser incluído na próxima versão (1.3.0) do Alamofire. Enquanto isso, usando as informações deste tópico, criei uma classe que simplifica o upload de arquivos e inclui parâmetros adicionais ("entradas" regulares) na solicitação junto com um ou mais arquivos. Sem assumir que os arquivos são de um tipo específico ou o uso de roteadores.
FileUploader.swift:
Seria usado assim:
Verifique ou faça download deste gist: https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
fonte
O código na resposta de @antiblank não estava funcionando para mim. Fiz algumas alterações e está funcionando agora:
USAR:
O NetData de https://github.com/nghialv/Net/blob/master/Net/NetData.swift
código upload.php:
fonte
Versão mais curta baseada nas respostas @antiblank e @VincentYan.
Classe
Uso
fonte
Embora existam outras respostas que aconselham como construir manualmente solicitações multipartes, você pode querer ficar com o AFNetworking. Mesmo que seja escrito em Objective-C, você ainda pode usá-lo em seus projetos Swift (consulte Swift e Objective-C no mesmo projeto ). De qualquer forma, o código Swift para enviar uma solicitação multiparte usando AFNetworking é o seguinte:
O Xcode irritante tem problemas para reconhecer este
id<AFMultipartFormData>
parâmetro,formData
então você não gosta do típico autocompletar de código do editor doappendPartWithFileData
método ou de seus parâmetros, mas quando você o compila e executa, ele funciona bem.fonte
Você está recebendo 415 por falta do tipo de conteúdo em sua solicitação. Abaixo está uma fonte total para upload de imagens no Swift 2 e AlamoFire
fonte
Abaixo estão o código Swift e Php
Código Swift -> Apple Swift versão 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Destino: x86_64-apple-macosx10.9
Código PHP para obter parâmetros e arquivo
Aqui os parâmetros são manipulados em $ _Request
E os arquivos são manipulados em $ _File
O formato nos dados $ _File (Array, Dicionário ou String) dependerá do Request in swift side, Aqui Veja esta linha no código
no lado do Php withName: "imgFiles []" fornece a matriz de nome, formato, tipo
Por exemplo
Código PHP
fonte
Peguei a resposta do antiblank e envolvi tudo isso em uma função com manipulador de conclusão. Achei que poderia ser útil para alguém. É um pouco mais 'áspero' do que a resposta do antiblank, pois estou simplesmente pegando uma resposta de string do arquivo PHP (não JSON).
É assim que você chama:
Esta é a função em si:
E aqui está o arquivo php.
fonte