为什么不是我的文件从iPad上传到MySQL数据库?

我不知道问题出在我的PHP代码或Objective-C的一面。 我不明白,这非常好,以便将不胜感激获取文件从iPad应用程序我创建MySQL数据库上传任何帮助。 现在,只有文件的描述是越来越贴到数据库中,但是团块/文件不是。 任何帮助将非常感谢!

这是我的PHP代码:

<?php $username = "person"; $password = "xxxxxxx"; $database = "database"; mysql_connect(localhost,$username,$password); mysql_select_db($database) or die("Unable to select database"); $file = $_FILES['file']; $name = $file['tmp_name']; $testpage = file_get_contents($name); $testpage = mysql_real_escape_string($testpage); mysql_query("INSERT INTO tbldocs(Title,Document) VALUES('some title','$testpage')"); mysql_close(); ?>

这里是我的Objective-C代码,包装它变成一个HTTP数据包

NSMutableDictionary* post_dict = [[NSMutableDictionary alloc] initWithCapacity:2]; [post_dict setObject:@"test_value" forKey:@"test_key"]; [post_dict setObject:[NSURL fileURLWithPath:[pdfUrl absoluteString]] forKey:@"file"]; NSData* regData = [self generateFormData:post_dict]; [post_dict release]; NSMutableURLRequest* post = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:@"http://myserver/upload.php"]]; [post addValue: @"multipart/form-data; boundary=_insert_some_boundary_here_" forHTTPHeaderField: @"Content-Type"]; [post setHTTPMethod: @"POST"]; [post setHTTPBody:regData]; NSURLResponse* response; NSError* error; NSData* result = [NSURLConnection sendSynchronousRequest:post returningResponse:&response error:&error]; NSLog(@"%@", [[[NSString alloc] initWithData:result encoding:NSASCIIStringEncoding] autorelease]);

谢谢你,罗西

--------------解决方案-------------

变量$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')");
}

另请注意:如果您的上传文件大于64K则必须指定Document作为字段类型MEDIUMBLOB 。 常规BLOB数据类型支持最多64K的数据。

分类:MySQL的 时间:2015-03-15 人气:0
本文关键词: mysql的,HTTP,iPad的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.681 (s). 10 q(s)