진행률 표시 줄을 보여주는 플래시 이외의 업로드 패널을 만들려고했습니다. 우리 서버에는 PHP 5.3이 있습니다 (현재 5.4로 업그레이드 할 수 없으므로 새 업로드 진행 기능 =>http://php.net/manual/en/session.upload-progress.php). 플래시 기반 솔루션, 확장 프로그램 등은 사용할 수 없습니다.AJAX/PHP 기반 업로드 (대용량 파일의 진행률 표시 줄 포함)
따라서 AJAX와 결합 된 XMLHttpRequest를 사용해 보았습니다. 여기에서 문제는 부분적으로 성공한 것입니다.
나는 약 380MB의 파일을 업로드하고 서버에 저장할 수 있었지만, 4GB와 같은 더 큰 파일을 사용하려고 시도하면 서버에 저장되지 않습니다 (Firebug로 한 점은 "POST aborted"라고 말합니다).
또 다른 이상한 점은 동일한 파일에서 xhr.upload.loaded는 xhr.upload.total의 동일한 차원으로 시작하여 거기에서부터 계산을 시작한다는 것입니다.
누구든지이 문제를 해결하는 방법을 알고 있습니까 아니면 다른 해결책이 있습니까?
클라이언트 코드는 다음과 같습니다
<script type="application/javascript" src="jquery.js"></script>
<script type="application/javascript">
function uploadToServer()
{
fileField = document.getElementById("uploadedFile");
var fileToUpload = fileField.files[0];
var xhr = new XMLHttpRequest();
var uploadStatus = xhr.upload;
uploadStatus.addEventListener("progress", function (ev) {
if (ev.lengthComputable) {
$("#uploadPercentage").html((ev.loaded/ev.total) * 100 + "%");
}
}, false);
uploadStatus.addEventListener("error", function (ev) {$("#error").html(ev)}, false);
uploadStatus.addEventListener("load", function (ev) {$("#error").html("APPOSTO!")}, false);
xhr.open(
"POST",
"serverUpload.php",
true
);
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("X-File-Name", fileToUpload.fileName);
xhr.setRequestHeader("X-File-Size", fileToUpload.fileSize);
xhr.setRequestHeader("X-File-Type", fileToUpload.type);
//xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.send(fileToUpload);
}
$(function(){
$("#uploadButton").click(uploadToServer);
});
</script>
HTML 부분 :
<form action="" name="uploadForm" method="post" enctype="multipart/form-data">
<input id="uploadedFile" name="fileField" type="file" multiple />
<input id="uploadButton" type="button" value="Upload!">
</form>
<div id="uploadPercentage"></div>
<div id="error"></div>
서버 측 코드 :
<?php
$path = "./";
$filename = $_SERVER['HTTP_X_FILE_NAME'];
$filesize = $_SERVER['CONTENT_LENGTH'];
$file = "log.txt";
$fo= fopen($file, "w");
fwrite($fo, $path . PHP_EOL);
fwrite($fo, $filename . PHP_EOL);
fwrite($fo, $filesize . PHP_EOL);
fwrite($fo, $path . $filename . PHP_EOL);
file_put_contents($path . $filename,
file_get_contents('php://input')
);
?>
봐 단계를 따르십시오 ** ** max_post_size ** 및 게시/파일 크기 업로드 관련 플래그. –
나는 그것들을 이미 점검했고 모든 것이 잘된 것처럼 보인다. – DiG
그것은 농담처럼 들리지만 어쨌든 사람들은 어리석은 일을하기 때문에 어쨌든 물어 봅니다. "FAT32를 파일 시스템으로 사용하고 있습니까?" –