我是 iPhone 开发的新手,我有一个问题,如何将 pdf 文件的请求从文档目录发送到 Web 服务,例如
http://www.publigeee.com/index.php?q=api/upload&uid=1&title=Sample&file=insert Pdf file here
如何在此链接中插入该 pdf 文件?我为此花了5个小时,但我做不到,请帮助我
提前致谢
我是 iPhone 开发的新手,我有一个问题,如何将 pdf 文件的请求从文档目录发送到 Web 服务,例如
http://www.publigeee.com/index.php?q=api/upload&uid=1&title=Sample&file=insert Pdf file here
如何在此链接中插入该 pdf 文件?我为此花了5个小时,但我做不到,请帮助我
提前致谢
本质上,您感兴趣的是上传一个文件,该文件存在于您的应用程序的文档目录中。在上述情况下,您需要将 PDF 文件上传到您的服务器。
我使用以下方法为 XML 文件实现了相同的功能 -
//该函数假设文件存在于文档目录中
- (void)uploadXMLFile:(NSString*)sourceFileName atPath:(NSString*)filePath{
// constructing connection request for url with no local and remote cache data and timeout seconds
NSURL* scriptURL = [NSURL URLWithString:kFileUploadScriptURL];
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:scriptURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:20];
[request setHTTPMethod:@"POST"];
NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
// allocation mem for body data
NSMutableData* bodyData = [[[NSMutableData alloc] init] autorelease];
// initializing post body boundary
NSString *stringBoundary = @"0xKhTmLbOuNdArY";
// setting request header required
// request containing multi part form data body and identified charater set encoding
[request setAllHTTPHeaderFields:[NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, stringBoundary],@"Content-Type",
@"gzip",@"Accept-Encoding",nil]];
// appending body string
[bodyData appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
// Adds post data
// Adds files to upload
// file data identify its content type, data encoding and content disposition
// file is identified through its file name on server
// file data is retrived from the identified file url
[bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", @"file", sourceFileName] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"Content-Type: %@; charset=%@\r\n\r\n", @"document/xml", charset] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[NSData dataWithContentsOfFile:filePath]];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
// set post body to request
[request setHTTPBody:bodyData];
NSString* bodyDataString = [[NSString alloc] initWithData:bodyData encoding:NSUTF8StringEncoding];
NSLog(@"%@",bodyDataString);
// create new connection for the request
// schedule this connection to respond to the current run loop with common loop mode.
// NSURLResponse *response = nil;
// NSError *error = nil;
// NSLog(@"%@",[[[NSString alloc] initWithData: [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error] encoding:NSUTF8StringEncoding]autorelease]);
[[NSURLConnection alloc] initWithRequest:request delegate:self];
if (!responseData) {
self.responseData = [[[NSMutableData alloc] initWithLength:0] autorelease];
}
}
其中 kFileUploadScriptURL 是服务器 URL 的常量
#define kFileUploadScriptURL @"SERVER_ADDRESS/upload_file.php"
upload.php 本质上包含一个 PHP 脚本来接受数据并将其写入服务器上的目录之一。因此一个 XML 文件被上传到服务器。您可以在函数中替换所需的参数以将其设置为上传 PDF。由于还希望其他参数,如标题等,您必须使用 HTTP POST 传递这些参数。
我不确定我是否真的可以将我的答案与 SO 上的其他问题联系起来,但这个问题与你所问的非常接近。
您需要使用 HTTP POST - 您不能将任意文件添加到 URL(大小会很快杀死您的请求)。
看看从 iOS 发送 HTTP 的方法 - 有很多可用的信息。此外,您所指的站点(www.publicgee.com)必须在某个端点上支持 POST 方法,否则您根本无法做到。
所以: