我花了几个小时阅读有关如何将大文件上传到服务器的信息。这些视频文件将以数百兆字节为单位,并采用.mp4格式。
我的第一次尝试是使用PHP处理POST,但由于php.ini和httpd.conf中的限制,这不适用于超过2兆字节的文件。
有些用户只是将这些限制增加到他们需要的级别,并希望上传能够正常工作。
有些网站似乎正在使用Flash上传程序,但我尝试过的程序很难,并且从未明确提及它们是否解决了上传大小问题。
我还使用PHP作为客户端查看了FTP,但我发现的所有示例都只是在POST文件后将文件传输到FTP服务器。使用单独客户端的FTP是不可能的,因为文件名和相关数据存储在数据库中。
目前,我在localhost上运行,该站点将从我有物理访问权限的盒子中提供,但我仍然担心增加max_upload_size和相关要求,因为最终我想转移到托管服务。
什么是最好的解决方案?有没有办法严格通过PHP和HTML上传大文件?如果没有,上传大文件的最佳解决方案是什么,同时仍能将文件名传递给数据库?
感谢所有回答的人
答案 0 :(得分:1)
标准的基于表单的文件上传不适合您,因为文件是在单个HTTP POST请求中上传的。
如果您正在寻找网站内置的解决方案,您应该考虑使用一些上传组件,它可以将文件缩小到客户端的块,在单独的请求中发送每个块并将文件放在服务器上。这些组件用作浏览器扩展。尽管现在每个人都对HTML5很着迷,没有人喜欢Java applet和ActiveX组件,但Java / ActiveX最适合你的任务。
答案 1 :(得分:1)
我认为使用PHP编程的东西总是会受到HTTP文件上传的限制。我会使用像Simple2FTP这样的应用程序,而不是尝试编写PHP中可行的东西。 http://www.simple2ftp.com使用PHP脚本来处理用户并管理文件和JavaScript以通过FTP进行实际上传。
答案 2 :(得分:-1)
NSString *LAction=@"post_add";
NSString *urlstring=[appDelegate.SmartAutoString stringByAppendingPathComponent:[NSString stringWithFormat:@"smartautoXml.php"]];
//NSLog(@"urlstring....%@",urlstring);
NSURL *nsurl =[NSURL URLWithString:urlstring];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:nsurl];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
NSData *videoData;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *pdfPath=[documentsDir stringByAppendingFormat:@"/video.mp4"];
NSLog(@"%@",pdfPath);
if ([[NSFileManager defaultManager] fileExistsAtPath:pdfPath])
{
NSLog(@"exist");
videoData = [NSData dataWithContentsOfFile:pdfPath];
}
if (videoData)
{
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
NSString *temp=[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"video\"; filename=\"video.mp4\"\r\n"];
[body appendData:[[NSString stringWithString:temp] dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"temp %@",temp);
[body appendData:[@"Content-Type: video/mp4\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:videoData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
}else
{
NSLog(@"NOT Data");
}
videoData=nil;
[request setHTTPBody:body];
NSLog(@"logoooooooo---q-%@",request);
NSLog(@"URLTwo Vedio==> %@?action=%@&userId=%@&postId=%@",urlstring,LAction,appDelegate.userId,stringReturnXmlOne);
con = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
if (con)
{
self.receivedData = [[NSMutableData alloc]init];
NSMutableData *data = [[NSMutableData alloc] init];
self.receivedData = data;
NSLog(@"RECIEVED DATA Video %@",self.receivedData);
}
else
{
[activityIndicator stopAnimating];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Error connecting to remote server" delegate:self
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
NSLog(@"Finish Video");
}
答案 3 :(得分:-2)
尝试使用http请求手动上传文件作为字节。当你控制双方(客户端和服务器)。您可以在标题中传递完整的文件名。