Загрузить файл sqlite

Я использую AFNetworking, чтобы попытаться загрузить файл:

-(void)uploadFile{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.sqlite"];
NSURL *filePathURL = [NSURL fileURLWithPath:filePath];

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://localhost:8888/myApp/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:filePathURL name:@"file" fileName:@"data.sqlite" mimeType:@"text/html" error:nil];
} error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;

NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Success: %@ %@", response, responseObject);
}
}];

[uploadTask resume];
}

И этот файл php upload.php:

<?php

$uploaddir = 'uploads/';
$file = basename($_FILES['uploadedfile']['name']);
$uploadfile = $uploaddir . $file;

echo "file=".$file;

if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $uploadfile)) {
echo $file;
}
else {
echo "error";
}
?>

Это печать:

Ошибка домена = com.alamofire.error.serialization.response код = -1016
«Запрос не выполнен: недопустимый тип содержимого: text / html» UserInfo = 0x7b8b2bf0

Это проблема от mimeType ? Я также использовал application/x-sqlite3 тип контента в сторонах iOS и php.

4

Решение

Код на стороне клиента загружается с использованием file имя поля, но код сервера ищет uploadedfile, Вы должны использовать одно и то же имя поля на обеих платформах.

Тип пантомимы должен быть фиксированным. Поскольку файлы SQLite представляют собой двоичные файлы, а не текстовые файлы, я бы предложил тип MIME application/x-sqlite3 или же application/octet-stream, скорее, чем text/html или же text/plain, Но несоответствующее имя поля является более вопиющей проблемой.


Кстати, вы сообщаете об ошибке:

Ошибка Domain = com.alamofire.error.serialization.response Code = -1016 «Запрос не выполнен: недопустимый тип содержимого: text / html» UserInfo = 0x7b8b2bf0

Обычно это результат того, что страница вашего сервера возвращается text/html, но AFURLSessionManager ожидает JSON.

Вы можете изменить менеджера responseSerializer:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

Или, лучше, измените код своего сервера, чтобы он возвращал JSON.

6

Другие решения

Других решений пока нет …