В настоящее время у меня есть PHP API с использованием REST, который имеет следующий метод:
private function createVideoCast(){
if($this->get_request_method() != "POST"){
$error = array('status' => "Failed", "msg" => "Invalid Request Method");
$this->response($this->json($error), 406);
}
else{
$vid = (int)$this->getLastVideoCastId() + 1;
$date = $this->_request['date'];
$video = $this->_files['video'];
if(!empty($video['name']) && !empty($date)){
$vorder = (int)$this->getLastVideoCastVorder($date) + 1;
$vidExts = array("video/mp4");
if(!in_array($video['type'], $vidExts)){
$error = array('status' => "Failed", "msg" => "Video Must Be Of Type MP4");
$this->response($this->json($error), 400);
}
if($video['size'] > 1073741824){
$error = array('status' => "Failed", "msg" => "Video Maximum Size Is 1GB");
$this->response($this->json($error), 400);
}
$desired_base_dir = "videocasts/".$date;
if(is_dir($desired_base_dir) == false){
mkdir($desired_base_dir);
$video_name = $vorder.".mp4";
if(is_dir($desired_base_dir."/".$video_name) == false){
move_uploaded_file($video['tmp_name'], $desired_base_dir."/".$video_name);
}
else{
unlink($desired_base_dir."/".$video_name);
move_uploaded_file($video['tmp_name'], $desired_base_dir."/".$video_name);
}
$video_path = $desired_base_dir."/".$video_name;
$sql = "INSERT QUERY TO MY DATABASE";
if(mysql_query($sql, $this->db)){
$success = array('status' => "Success", "msg" => "Video Successfully Uploaded.");
$this->response($this->json($success), 200);
}
else{
$error = array('status' => "Failed", "msg" => mysql_error());
$this->response($this->json($error), 400);
}
}
}
else{
$error = array('status' => "Failed", "msg" => "Date & Video Required");
$this->response($this->json($error), 400);
}
}
}
И у меня есть HTML-форма, отправляющая это через ajax, как показано ниже:
<script type="text/javascript">
function _(el){
return document.getElementById(el);
}
function createVideoCast(){
var date = _("date").value;
var video = _("video").files[0];
var formdata = new FormData();
formdata.append("date", date);
formdata.append("video", video);
var ajax = new XMLHttpRequest();
ajax.upload.addEventListener("progress", progressHandler, false);
ajax.addEventListener("load", completeHandler, false);
ajax.addEventListener("error", errorHandler, false);
ajax.addEventListener("abort", abortHandler, false);
ajax.open("POST", "../newsApi.php?rquest=createVideoCast");
ajax.send(formdata);
}
function progressHandler(event){
var percent = (event.loaded / event.total) * 100;
_("progressBar").value = Math.round(percent);
_("upload-status").innerHTML = Math.round(percent)+"%";
}
function completeHandler(event){
console.log(event);
var message = JSON.parse(event.target.responseText);
_("message").innerHTML = message.msg;
_("progressBar").value = 0;
if(message.msg == "VideoCast Successfully Created."){
_("vc-form").reset();
}
}
function errorHandler(event){
console.log(event);
_("message").innerHTML = "Upload Failed";
}
function abortHandler(event){
_("message").innerHTML = "Upload Aborted";
}
</script>
Он отлично работает для видео размером примерно 250 МБ, но как только размер видео превышает этот размер, я получаю следующую ошибку:
«<- SHTML Wrapper — 500 Ошибка сервера -> ↵ [произошла ошибка при обработке этой директивы] ↵ «
Мои настройки файла php.ini настроены на обслуживание файлов размером 1 ГБ. Я надеюсь, что кто-то может оказать некоторую помощь в этом, спасибо заранее.
Задача ещё не решена.
Других решений пока нет …