我正在使用 xampp 开发 Win7 64。我正在上传一个文件名带有希腊字符的文件。文件名存储不正确,例如 ελληνικά.xlsx 存储为ελληνικά.xlsx。
我想它必须与编码有关。
在我的 html 中,我正在使用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我的javascript在下面给出
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);}
});
}
服务器代码如下
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.';
}
我在 php 文件中放置了一个断点并检查
了 $_FILES[file][name]。
文件名似乎是正确的。文件内容上传也没有错误。
我猜当文件从临时目录移动到上传目录时发生了一些事情,但我没有想法:(