gpt4 book ai didi

mysql - 为什么我的文件没有从 iPad 上传到 MySQL 数据库?

转载 作者:行者123 更新时间:2023-11-29 14:31:19 25 4
gpt4 key购买 nike

我不知道问题是出在我的 PHP 代码中还是 Objective-C 方面。我不太明白这一点,所以希望能得到任何帮助,将文件从我正在创建的 iPad 应用程序上传到 mysql 数据库。目前,只有文件的描述会发布到数据库中,但 blob/文件不会。任何帮助将不胜感激!

这是我的 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 编码内容。有一个simple example在generateFormData方法中的CocoaDev上,在行示例中:

[post_dict setObject:[NSURL fileURLWithPath:@"/Butterfly.tif"] forKey:@"file1"];

他在这里设置了 $_FILE['file1'] 变量的 PHP 等价项,在您的情况下,您可能需要选择 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 - 为什么我的文件没有从 iPad 上传到 MySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com