2016-12-19 3 views
2

Я пытаюсь загрузить базу данных Sqlite из IOS Swift 3 на свой сервер с использованием Alamofire 4.0, но у меня возникли проблемы с преобразованием файла sqlite в тип данных, необходимый для загрузки.Alamofire v4, Swift v3 Загрузка файла Sqlite в домен

Большинство сообщений/примеры вопрос, кажется, по умолчанию для загрузки изображений, но я изо всех сил, чтобы найти пример загрузки SQLite или других типов файлов (для резервных целей)

Я искал основного кода и нашел, что это до сих пор, который выглядит очень разумным (спасибо следующее сообщение: Alamofire 4 upload with parameters)

let parameters = ["file_name": "swift_file.jpeg"] 

Alamofire.upload(multipartFormData: { (multipartFormData) in 
    multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 1)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg") 
    for (key, value) in parameters { 
     multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) 
    } 
}, to:"http://sample.com/upload_img.php") 
{ (result) in 
    switch result 
    { 
    case .success(let upload, _, _): 
    upload.uploadProgress(closure: { (progress) in 
     //Print progress 
    }) 
    upload.responseJSON { response in 
     //print response.result 
    } 
    case .failure(let encodingError): 
    //print encodingError.description 
    } 
} 

часть я борюсь с, чтобы присоединить файл SQLite к загрузке (multipartFormData.append (......... .. ?) Я искал, но не нашел хороших ссылок.

Да, я newbe, но изо все сил, любая помощь будет оценена ... ..

ответ

2

Это точно так же, как пример изображения, за исключением, что тип MIME будет application/octet-stream.

Кроме того, вы, вероятно, захотите загрузить его непосредственно с fileURL, а не сначала загрузите его в Data.

Как в стороне, parameters в этом примере не совсем понятны, поскольку он выглядит излишним с именем файла, предоставленным при загрузке самого изображения. Таким образом, вы должны использовать любые параметры, необходимые вашему веб-сервису, если таковые имеются. Если у вас нет дополнительных параметров, вы просто полностью опустите петлю for (key, value) { ... }.

И, наконец, замените имя поля file на любое имя поля, которое ищет веб-служба.

// any additional parameters that must be included in the request (if any) 

let parameters = ["somekey": "somevalue"] 

// database to be uploaded; I'm assuming it's in Documents, but perhaps you have it elsewhere, so build the URL appropriately for where the file is 

let filename = "test.sqlite" 
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
    .appendingPathComponent(filename) 

// now initiate request 

Alamofire.upload(multipartFormData: { multipartFormData in 
    multipartFormData.append(fileURL, withName: "file", fileName: filename, mimeType: "application/octet-stream") 

    for (key, value) in parameters { 
     multipartFormData.append(value.data(using: .utf8)!, withName: key) 
    } 
}, to: urlString) { result in 
    switch result { 
    case .success(let upload, _, _): 
     upload 
      .authenticate(user: self.user, password: self.password) // only needed if you're doing server authentication 
      .uploadProgress { progress in 
       print(progress.fractionCompleted) 
      } 
      .responseJSON { response in 
       print("\(response.result.value)") 
     } 
    case .failure(let encodingError): 
     print(encodingError.localizedDescription) 
    } 
} 

Unrelated, но если вы не уверены, какой тип MIME для использования, вы можете использовать эту процедуру, которая будет пытаться определить тип пантомимы от расширения файла.

+0

Спасибо за помощь, я думал, что все работает нормально, но в спешке я прочитал неправильный каталог на сервере. Файл не загружается. Код в яблоке выглядит хорошо, но – maper1

+0

Это подходящий код Alamofire для создания многостраничного запроса. Когда я это делаю, я вижу прогресс и появляется на моем сервере. Я подозреваю, что отключить b/w код сервера и код клиента. Не видя код сервера, я не уверен, что смогу посоветовать вам дальше. – Rob

+0

Это похоже на серверную проблему, но файл работает с андроидом, а также с swiftv2 (использовал SRwebclient) Завершено «progress.fraction» - это печать несколько раз до значения 0,01322 .... затем сообщает «nil», : Я добавил к upload.response: .request .response .data .result .timeline Отдает: факультативный ( {URL: HTTP: //mydomain/fileup.aspx} {статус код: 500, заголовки { "Cache-Control" = private; Connection = close; "Content-Type" = "text/html"; "X-AspNet-Version" = "4.0.30319"; Дополнительно (6411 bytes) FAILURE - любая помощь? – maper1

 Смежные вопросы

  • Нет связанных вопросов^_^