2016-12-16 26 views
0

我使用jQuery AJAX功能和PHP通過郵寄方法有一個大文件傳輸的問題:視頻文件傳輸空效應初探readyState的0,狀態0和狀態文本錯誤

我有javascript函數:

function multimedia_update(){ 

if(contador_peticiones > 0){return;} 

contador_peticiones++; 

var formData = new FormData($('#sky-form')[0]); 

$.ajax({ 
    xhr: function() 
     { 
     var xhr = new window.XMLHttpRequest(); 
     //Upload progress 
     xhr.upload.addEventListener("progress", function(evt){ 
      if (evt.lengthComputable) { 
      var percentComplete = ((evt.loaded/evt.total)*100)-2; 
      //Do something with upload progress 
      $("#progreso").css('width', percentComplete+'%'); 
      $("#progreso").html(percentComplete+'%'); 
      } 
     }, false); 

     xhr.addEventListener("error", onError, false); 
     //Download progress 
     xhr.addEventListener("progress", function(evt){ 
      if (evt.lengthComputable) { 
      var percentComplete = ((evt.loaded/evt.total)*100)-2; 
      //Do something with download progress 
      $("#progreso").css('width', percentComplete+'%'); 
      $("#progreso").html(percentComplete+'%'); 
      } 
     }, false); 
     return xhr; 
     }, 
    type:"POST", 
    dataType:"JSONP", 
    url:"drivers/multimedia-update.php", 
    data:formData, 
    //necesario para subir archivos via ajax 
    cache: false, 
    contentType: false, 
    processData: false, 
    timeout: 3600000, 
    beforeSend: function(){ 
     $('.alert-info').fadeIn(); 
    }, 
    success: function(datos){ 
     var obj = jQuery.parseJSON(datos); 
     switch(parseInt(datos[0].respuesta_final)){ 
      case -1: 
       alert('Error al guardar'); 
      break; 
      case 0: 
       alert('Hubo un problema al guardar alguna información, por favor notificar.'); 
      break; 
      case 1: 
       alert('Éxito al guardar.'); 
      break; 
     } 
     contador_peticiones = 0; 
     multimedia_grid(); 
    }, 
    error: function(jqXHR, status, error) { 
     mi_respuesta = jqXHR; 
     console.log(jqXHR); 
     console.log("espacio"); 
     console.log(status); 
     console.log("espacio"); 
     //console.log(error); 
     //alert("error en la petición 124"); 
    } 
}) 
.done(function(){ 
    contador_peticiones = 0; 
}); 

return false; 

} 

在PHP代碼通過FTP客戶端上傳文件(SubirArchivo功能):

if(isset ($_FILES['file2']['name'])){ 
    if($_FILES['file2']['name'] != ''){ 
    $nombre_archivo_video = clean($_FILES["file2"]["name"]); 
    $nombre_archivo_video = substr(md5(uniqid(rand())),0,4).'_'.$nombre_archivo_video; 
    $directorio = '/video/repository/'; 
    $respuesta2 = SubirArchivo($nombre_archivo_video, $_FILES["file2"]["tmp_name"], $directorio);   
    } 
} 

形式:

<form action="" id="sky-form" class="sky-form" enctype="multipart/form-data"> 
    <fieldset> 
     <div class="row"> 
     <section> 
     <p>Video</p> 
     <p>Archivo en formato mp4</p> 
     <label for="file" class="input input-file"> 
      <div class="button"> 
      <input id="file-4" type="file" class="file" name="file2" accept="video/mp4" onchange="this.parentNode.nextSibling.nextSibling.value = this.value" />Browse 
      </div> 
      <input type="text" placeholder="Video" readonly="" /> 
     </label> 
     </section> 
     </div> 
    </fieldset> 
</form> 

我的php.ini配置:

max_execution_time = 0 
max_input_time = -1 
memory_limit = 512M 
post_max_size = 368M 
upload_max_filesize = 368M 

的問題是,它不是以較大80M的文件有效,更小的它工作得很好,所以我不知道到底是什麼錯誤。

我希望它至少能夠處理300M的限制。

我一直在關注我的問題。我現在添加更多信息。發生錯誤時,在控制檯中打印引發我的XHR響應:readystate 0,status 0和statusText錯誤。我試圖實現以下答案:link1,link2但我仍然有同樣的問題。我還在尋找......

更新:

那好吧下面的話題,我一直在做測試,現在事實證明,它是不是文件大小的問題。顯然該文件有問題或錯誤,但我仍然不知道爲什麼。當我試圖加載一個docx文件或GD不支持擴展名的圖像時,我正在讀這個問題。

+0

如果您的'var_dump($ _FILES)'您應該看到錯誤消息 – 2016-12-16 01:43:14

+0

Thaks爲您提供幫助。我試過你的建議:當escript完成時(<80M)返回$ _FILES數組信息....但是在大文件中,它執行javascript錯誤塊,例如在safari中顯示「丟失連接」消息。 –

回答

0

那麼我不知道這是否真的是一個答案。但是經過一段時間,我可以證實這個錯誤可能出現在共享服務器上,這可以讓你自由地配置文件傳輸參數,但它們不起作用。具體來說,問題發生在我的godaddy服務和一個叫做dissenynet。當公司僱用專用服務器(在我的情況下,IBM雲)時,問題終於得到解決,我不得不安裝我自己的LAMP服務器並能夠配置必要的變量。目前我可以上傳500 MB以上的文件而沒有任何問題。另外需要注意的是,這種類型的衝突會導致錯誤,例如wordpress中的「HTTP錯誤」,因爲傳輸處理不正確。顯然,wordpress的「特殊」服務已經解決了這個問題,因爲通常由於wordpress給你的自由,這種類型的錯誤已經呈現很長時間了。我希望這將有所幫助。

相關問題