Переменная $file['name']
- это имя файла, которое было опубликовано в загрузке (например, имя файла из локальной системы).
Переменная $file['tmp_name']
- это имя файла на сервере.Это имя файла, который содержит контент, который вы хотите поместить в базу данных.
Это должно относиться к стороне php.Код Objective-C немного сложнее.Вам необходимо вручную создать MIME-кодированный контент, который используется при загрузке.Существует простой пример для CocoaDev в методе generateFormData, в примере строки:
[post_dict setObject:[NSURL fileURLWithPath:@"/Butterfly.tif"] forKey:@"file1"];
он устанавливает здесь PHP-эквивалент переменной $_FILE['file1']
, в вашем случае,Вы, вероятно, хотите выбрать forKey:@"file"
.
Редактировать Автономный синхронный вариант.У меня есть следующие параметры: DestUrl
- NSURL, содержащий место назначения, fileName
- NSString, содержащая имя файла и, наконец, FileData
, NSData, содержащий содержимое файла.
NSMutableData *data = [[NSMutableData alloc] initWithCapacity:100];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:DestUrl];
[request setHTTPMethod:@"POST"];
// Define the boundary
NSString *boundary = [NSString stringWithFormat:@"weasel_grapple_%ld_foo", (long)time(NULL)];
// Tell MIME that content type
[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]
forHTTPHeaderField:@"Content-Type"];
// First piece of data
[data appendData:[[NSString stringWithFormat:@"--%@\n", boundary] dataUsingEncoding:NSASCIIStringEncoding]];
// Add in the form field name (name), filename
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\n",
@"file", fileName] dataUsingEncoding:NSASCIIStringEncoding]];
// And it's binary data here
[data appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\n\n"] dataUsingEncoding:NSASCIIStringEncoding]];
// This is content of the file
[data appendData:FileData];
// Need a blank link as a separator of form-data items
[data appendData:[[NSString stringWithString:@"\n"] dataUsingEncoding:NSASCIIStringEncoding]];
// Mark the end of the upload message
[data appendData:[[NSString stringWithFormat:@"--%@--\n", boundary] dataUsingEncoding:NSASCIIStringEncoding]];
[request setHTTPBody:data];
NSURLResponse *response;
NSError *error;
NSData *retData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
Если вы хотите взять URL файла и превратить его в FileData, выполните: NSData * FileData = [NSData dataWithContentsOfFile: fileURL];
На стороне php сначала протестируйте простую форму загрузки, убедившись, что загруженные данные попадают в базу данных и работают оттуда.
Мой фрагмент файла, загружаемый в базу данных наPHP сторона выглядит так.Это довольно ужасно, но оно загружается через строку.:
foreach ($_FILES as $key => $value) {
$file_tag = $key;
$fname = basename($value['name']);
$name = $value['tmp_name'];
$testpage = file_get_contents($name);
$testpage = addslashes($testpage);
mysql_query("INSERT INTO tbldocs(Title,Document) VALUES('some title','$testpage')");
}
Примечание также: если размер загружаемого вами файла превышает 64 КБ, вы должны указать Document
в качестве типа поля MEDIUMBLOB
.Обычный тип данных BLOB
поддерживает только до 64K
данных.