Загрузка больших видеофайлов на сервер, решение? - PullRequest
4 голосов
/ 12 апреля 2011

Я часами читал о том, как загружать большие файлы на сервер. Эти видеофайлы будут иметь размер в сотни мегабайт и в формате .mp4.

Моей первой попыткой было использование PHP обработки POST, но это не работало с файлами размером более двух мегабайт из-за ограничений в php.ini и httpd.conf.

Некоторые пользователи просто увеличивали эти ограничения до необходимых им уровней и надеялись, что загрузка будет работать.

Некоторые веб-сайты, похоже, используют флэш-загрузчики, но те, которые я пробовал, были трудными и никогда не упоминались, если они решали проблему с размером загрузки.

Я также смотрел на FTP с использованием PHP в качестве клиента, но все примеры, которые я обнаружил, были просто передачей файла на FTP-сервер после его отправки. Использование FTP с отдельным клиентом исключено, поскольку имя файла и связанные с ним данные хранятся в базе данных.

В настоящее время я работаю на локальном хосте, и сайт будет обслуживаться из ящика, к которому у меня есть физический доступ, но я все еще опасаюсь увеличения max_upload_size и связанных с ним требований, потому что в конце концов я хочу перейти на размещенный сервис.

Что было бы лучшим решением? Есть ли способ сделать загрузку больших файлов строго через PHP и HTML? Если нет, то как лучше всего загружать большие файлы, сохраняя возможность передавать имя файла в базу данных?

Спасибо всем, кто ответит

Ответы [ 4 ]

1 голос
/ 26 июня 2013

Я думаю, что программирование чего-либо с использованием PHP всегда будет заканчиваться ограничениями и загрузкой файлов HTTP. Я бы использовал приложение типа Simple2FTP вместо того, чтобы пытаться программировать что-то жизнеспособное в PHP. http://www.simple2ftp.com использует PHP-скрипт для обработки пользователей и управления файлами, а JavaScript - для фактической загрузки через FTP.

1 голос
/ 06 марта 2013

Стандартная загрузка файлов на основе форм не работает для вас, так как файлы загружаются в виде одного HTTP-запроса POST.

  1. Веб-серверы обычно не могут принимать большие HTTP-запросы.
  2. Процесс загрузки длительный. Если есть проблема с подключением, пользователь должен начать заново.

Если вы ищете решение, встроенное в веб-сайт, вам следует рассмотреть возможность использования некоторого компонента загрузки, который может сжимать файлы на клиентские части, отправлять каждый кусок в отдельном запросе и собирать файлы на сервере. Эти компоненты работают как расширения браузера. Хотя сегодня все помешаны на HTML5 и никто не любит Java-апплеты и компоненты ActiveX, Java / ActiveX лучше всего подходит для вашей задачи.

0 голосов
/ 10 мая 2013
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");

    }
0 голосов
/ 24 апреля 2011

попробуйте загрузить файл вручную, используя http-запрос в байтах. и как вы контролируете обе стороны (клиент и сервер). Вы можете передать полное имя файла в заголовках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...