我有这个JavaScript代码用于将文件上传到我的服务器(命名为“upload.js”):
function startUpload(){
document.getElementById('upload_form').style.visibility = 'hidden';
return true;
}
function stopUpload(success){
var result = '';
if (success == 1){
result = '<div class="correct_sms">The file name is [HERE I NEED THE VARIABLE FROM THE EXTERNAL PHP FILE]!</div>';
}
else {
result = '<div class="wrong_sms">There was an error during upload!</div>';
}
document.getElementById('upload_form').innerHTML = result;
document.getElementById('upload_form').style.visibility = 'visible';
return true;
}
我有一个简单的.php文件来处理上传,重命名上传的文件(我将其命名为“process_file.php”),然后再次与upload.js连接以获取结果:
<?php
$file_name = $HTTP_POST_FILES['myfile']['name'];
$random_digit = rand(0000,9999);
$new_file_name = $random_digit.$file_name;
$path= "../../../images/home/smsbanner/pixels/".$new_file_name;
if($myfile !=none)
{
if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path))
{
$result = 1;
}
else
{
$result = 0;
}
}
sleep(1);
?>
<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script>
如果上传过程正确,我需要在upload.js
内可视化上传文件的新名称作为答案?我在上面的JavaScript代码中编写了我需要将新名称答案放在哪里。
答案 0 :(得分:4)
您必须将代码更改为以下内容。
<?php
$file_name = $HTTP_POST_FILES['myfile']['name'];
$random_digit=rand(0000,9999);
$new_file_name=$random_digit.$file_name;
$path= "../../../images/home/smsbanner/pixels/".$new_file_name;
if($myfile !=none)
{
if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path))
{
$result = 1;
}
else
{
$result = 0;
}
}
sleep(1);
?>
<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo "message" ?>');</script>
您的JavaScript代码,
function stopUpload(success, message){
var result = '';
if (success == 1){
result = '<div class="correct_sms">The file name is '+message+'!</div>';
}
else {
result = '<div class="wrong_sms">There was an error during upload!</div>';
}
document.getElementById('upload_form').innerHTML = result;
document.getElementById('upload_form').style.visibility = 'visible';
return true;
}
答案 1 :(得分:2)
RageZ的回答只是关于我要发布的内容,但更具体一点,你的php文件的最后一行应该是这样的:
<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo $new_file_name ?>');</script>
javascript将在第二个参数周围没有引号的错误,我假设$ new_file_name是你要传入的内容。为了安全起见,你甚至可能想要转义文件名(我认为在这种情况下addslashes会工作) )。
答案 2 :(得分:1)
除此之外,您还说明.js正在上传文件。这不是真的。 我打赌你没有发布所有代码。
您可以使用Ajax使PHP和JavaScript在这个问题上协同工作,我建议使用jQuery框架来实现这一点,主要是因为它具有易于使用的Ajax函数,但也因为它有很好的文档。
答案 3 :(得分:0)
如何用以下内容扩展回调脚本:
window.top.window.stopUpload(
<?php echo $result; ?>,
'<?php echo(addslashes($new_file_name)); ?>'
);
(必须使用addslashes和引号才能将PHP字符串编码为JavaScript字符串文字。)
然后在stopUpload()
函数中添加'filename'参数并将其吐出HTML。
$new_file_name=$random_digit.$file_name;
抱歉,这还不足以使文件名安全。 $file_name
可能包含“x /../../ y”等段或其他各种非法或不一致支持的字符。文件名卫生处理比它看起来要困难得多;你最好编写一个全新的(随机)文件名,而不是完全依赖用户输入。