我使用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不支持擴展名的圖像時,我正在讀這個問題。
如果您的'var_dump($ _FILES)'您應該看到錯誤消息 – 2016-12-16 01:43:14
Thaks爲您提供幫助。我試過你的建議:當escript完成時(<80M)返回$ _FILES數組信息....但是在大文件中,它執行javascript錯誤塊,例如在safari中顯示「丟失連接」消息。 –