I'm working on Win7 64 with xampp. I'm uploading a file which has a filename with greek characters. Filename is stored incorrectly e.g ελληνικά.xlsx is stored as ελληνικά.xlsx.
I guess it has to do something with encoding.
In my html I'm using
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
My javascript is given below
function handleFileSelect(evt) {
var output=[];
if (evt.target.files.length === 0 ) exit();
var f = evt.target.files[0];
if ($.inArray(f.name.split('.').pop(), ['xls', 'xlsx']) === -1 ) {
$('#output').html('Wrong file type. Only Excel files are valid.');
exit;
}
ans = fileunit(f.size);
output.push('<li><strong>', f.name, ' - ',
ans[0].toFixed(2), ans[1], '</li>');
$('#list').html('<ul>' + output.join('') + '</ul>');
var fd = new FormData();
fd.append('file', evt.target.files[0]);
$.ajax({
url: 'uploaddata/file',
data:fd,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
$('#output').html(data);},
error: function(data) {
$('#output').html(data);}
});
}
Server code is given below
public function upload() {
// Checking upload error code
if ($_FILES["file"]["error"] > 0)
{
echo file_upload_error_message($_FILES["file"]["error"]);
return;
}
//Checking uplaod directory
$uploadDirectory = 'uploads' . DIRECTORY_SEPARATOR;
if(!is_dir($uploadDirectory))
{
@mkdir ($uploadDirectory, 0766, true);
}
if(!is_dir($uploadDirectory))
{
echo 'Server error. Impossible to create the upload folder.';
return;
}
elseif(!is_writable($uploadDirectory))
{
echo 'Server error. Upload directory is not writable.';
return;
}
//Checking if file is too big
if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) &&
empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0)
{
$error = 'Server error. File is too large, cannot upload.';
echo $error;
return;
}
$file_name = $_FILES["file"]["name"];
if (!move_uploaded_file($_FILES["file"]["tmp_name"], $uploadDirectory.$file_name))
{
echo 'Server error. Error moving uploaded file from temp dir to upload dir';
return;
}
echo $file_name . ' was uploaded successfully.';
}
I placed a breakpoint in php file and I checked
$_FILES[file][name].
Filename appears to be correct. Also file content uploads with no errors.
I guess that something is happening when file is moved from temp dir to upload dir but I'm out of ideas :(