0
如何獲取XMLHttpRequest中的實際文件? 使用evt.target.files會返回一個fileList對象,並且我無法抓取php端的實際文件,以便在服務器上保存。如何獲取XMLHttpRequest中的實際文件?
下面是代碼,我已經連接顯示的responseText從PHP代碼print_r($_POST);
function handleFileSelect(evt) {
reader = new FileReader();
reader.onload = function(e) {
// Ensure that the progress bar displays 100% at the end.
progress.style.width = '100%';
progress.textContent = '100%';
setTimeout("document.getElementById('progress_bar').className='';", 2000);
///////////THE JSON/////////////to encase file in JSON object
var sendFile = function(url, successHandler, errorHandler) {
var xhr = typeof XMLHttpRequest != 'undefined' ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.open('post', url, true);
//XHR progress tracking
xhr.upload.onprogress = function(event) {
//var native_progress = document.getElementById("native_progress");
//alert('in native_progress function');
if (event.lengthComputable) {
var complete = (event.loaded/event.total * 100 | 0);
native_progress.value = native_progress.innerHTML = complete;
}
};
xhr.onreadystatechange = function() {
var status;
var data;
// https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate
if (xhr.readyState == 4) { // `DONE`
status = xhr.status;
if (status == 200) {
//data = JSON.parse(xhr.responseText);
data = xhr.responseText;
successHandler && successHandler(data);
} else {
errorHandler && errorHandler(status);
}
}
};
var formData = new FormData();
formData.append('file', evt.target.files[0]);
//xhr.setRequestHeader("Content-type", "multipart/gorm-data");
//xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(formData);
};
sendFile('/ePub_Reader/temp_upload/save.php', function(data) {
alert('Response Text: ' + data);
}, function(status) {
alert('Something went wrong.');
});
///////////THE JSON - end/////////////
// Read in the image file as a binary string.
//reader.readAsBinaryString(evt.target.files[0]);
reader.readAsDataURL(evt.target.files[0]);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
謝謝穆薩。但是我多次更改了代碼,並在我的文章中錯誤地放置了'evt.target.files'而沒有'[0]'。我遍歷數組選擇'[i]'項目。\ n現在要清楚,我已經測試了以下內容,'var formData = new FormData(); \t \t \t formData.append('file',evt.target.files [0]); \t \t alert(evt.target.files [0] ['size']); \t \t alert(evt.target.files [0]);',大小給'663732字節',第二個警告給'[object file]',但是當我返回'print_r($ _ POST ['file']] );'我得到'[object filelist]'和'fwrite($ name_handle,$ _POST ['file']);'保存一個只有17byte的'損壞'文件。 – akeem
文件信息存儲在'$ _FILES'而不是'$ _POST' – Musa
好。使用'$ _FILES [ '文件']'如果得到一個數組的responseText'陣列 ( [名稱] => Saved_Book.epub [型] =>應用/ epub的+拉鍊 [tmp_name的值] => /應用程序/ MAMP/tmp/php/phpoUpcZ6 [error] => 0 [size] => 663732 )'。而'fwrite()'函數存儲一個0字節的「損壞」文件。 – akeem