上传前检查文件道具

时间:2009-11-14 17:46:18

标签: php jquery ajax

我正在练习PHP和AJAX,但我遇到了一些问题!

在选择要上传的图片后,我试图从jQuery警报中获取文件名,类型,大小,但我一直得到一个空字符串。

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="my_file" />
    <input type="submit" name="submit" value="Submit" />
</form>

此表单包含一个 JS 文件,该文件有一个ajax脚本,向php页面询问已发布文件的文件名,但它不起作用。在尝试获取此数据之前,是否需要上传文件?

JS文件:

$("input").change (function () {
    $.post("preview_uploader.php", { action:"get_size" }, function (data) {
        alert (data);
    });
});

PHP文件 preview_uploader.php

<?php
    if ($_POST["action"] == "get_test") print "text string test works!";
    if ($_POST["action"] == "get_name") print $_FILES["my_file"]["name"];
    if ($_POST["action"] == "get_size") print $_FILES["my_file"]["size"];
    if ($_POST["action"] == "get_type") print $_FILES["my_file"]["type"];
?>

如果我使用带有php页面的action:"get_test"进行测试,但它不适用于$_FILES["my_file"]["name"]$_FILES["my_file"]["type"]等,则可以正常运行...

有人可以帮我找到我错的地方吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的JS脚本正在向服务器发送单独的请求,因此您的PHP不知道该文件,并且$ _FILES [“my_file”]不是有效的索引。

您无需前往服务器获取文件名,只需使用此命令获取文件名:

$("input[type=file]").val();

我相信它也会带回路径,因此您需要删除路径以获取文件名。

如果您正在尝试获取所有其他详细信息(文件大小等),您将需要首先上传文件(这会使您尝试做的事情失败)或使用像这些解决方案一样的Flash + JavaScript组合:

答案 1 :(得分:1)

可以实际上使用jQuery获得大小。看看这个问题的答案:

How to check file input size with jQuery?

您可以使用给定的方法获取名称,大小和类型。一般认为,这是不可能的。你不能总是相信你听到的一切......