IOS使用post和PHP将pdf文件从文档目录上载到服务器
我正在从文档目录上传pdf。我已经提到将UIview转换为PDF并将PDF上传到服务器,但结果是PDF文件为零字节 这是我的密码。 Xcode侧:IOS使用post和PHP将pdf文件从文档目录上载到服务器,php,ios,objective-c,pdf,Php,Ios,Objective C,Pdf,我正在从文档目录上传pdf。我已经提到将UIview转换为PDF并将PDF上传到服务器,但结果是PDF文件为零字节 这是我的密码。 Xcode侧: -(NSMutableData *)createPDFDatafromUIView:(UIView*)aView { NSMutableData *pdfData = [NSMutableData data]; // Points the pdf converter to the mutable data object and to
-(NSMutableData *)createPDFDatafromUIView:(UIView*)aView
{
NSMutableData *pdfData = [NSMutableData data];
// Points the pdf converter to the mutable data object and to the UIView to be converted
UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
// draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
[aView.layer renderInContext:pdfContext];
// remove PDF rendering context
UIGraphicsEndPDFContext();
return pdfData;
}
-(NSString*)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
{
NSMutableData *pdfData = [self createPDFDatafromUIView:aView];
UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
// draws rect to the view and thus this is captured by UIGraphicsBeginPDFContextToData
[aView.layer renderInContext:pdfContext];
// remove PDF rendering context
UIGraphicsEndPDFContext();
// Retrieves the document directories from the iOS device
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
// instructs the mutable data object to write its context to a file on disk
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
NSLog(@"The pdf is saved in %@", documentDirectoryFilename);
return documentDirectoryFilename;
}
-(IBAction)snapchot:(id)sender
{
NSDate*todayDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"ddMMyyyy"];
NSString *mytext = [NSString stringWithFormat:@"%@.pdf",[dateFormatter stringFromDate:todayDate]];
[self createPDFfromUIView:_myView saveToDocumentsWithFileName:mytext];
NSData *datadat = [[NSData alloc] initWithContentsOfFile:mytext];
NSString *urlString = @"http://localhost/pfy/uploadtestformpdf.php";
NSString *filename = @"filename2";
NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *postbody = [NSMutableData data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.pdf\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithString:@"Content-Type: application/pdf\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:datadat]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postbody];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);
}
PHP方面:
<?php
$uploaddir = './uploaded/';
$file = basename($_FILES['userfile']['name']); $uploadfile = $uploaddir . $file;
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "Received file: $file";}
?>
您能帮助我吗?尽管您的代码存在一般问题,但问题似乎是您正在上载一个空白文件。您的方法
createPDFfromUIView:saveToDocumentsWithFileName:
将文件保存到documents目录并返回文件路径。但是,在使用文件内容填充NSData
对象时,实际上并没有使用该方法返回的路径。更改代码以捕获返回的路径字符串:
NSString *path = [self createPDFfromUIView:_myView saveToDocumentsWithFileName:mytext];
NSData *datadat = [[NSData alloc] initWithContentsOfFile:path];
非常感谢你的帮助。代码更新后,工作成功。谢谢