如何允许用户选择上传文件的位置?

时间:2012-07-14 13:31:14

标签: php

  

可能重复:
  How do I allow users to chose where to upload the file?

我想让我的用户选择上传文件的位置。如果有人能帮助我,那就太好了。

uploader.html http://pastebin.com/LQP9jxLH

<div id="main">
<center><h2>File Uploader Beta</h2></center><br />
<center>
<form action="upload.php" method="post" enctype="multipart/form-data">
File: <input type="file" name="filename" />
<input type="submit" value="Upload" />
</form>
</center>
</div>

upload.php的 http://pastebin.com/CtM1LW13

$folder = "files/";
$HTTP_POST_FILES = "";
if(isset($_FILES['filename']['tmp_name'])) // Check if $_FILES['filename']['tmp_name'] is there
{
        if (is_uploaded_file($_FILES['filename']['tmp_name']))  {  
                if (move_uploaded_file($_FILES['filename']['tmp_name'], $folder.$_FILES['filename']['name'])) {
                        Echo "Your file has been uploaded! You should probably tell Cody what you uploaded so he can get it in the right place. :)";
                } else {
                        Echo "Haha! You don't have access to do that.";
        }
        } else {
                Echo "Your upload has failed.";
        }
}

感谢所有帮助。 :)

此外,我需要它在文件上传后在页面中生成脚本。 比方说,如果exam​​ple.jpg上传到/ Cody / Pictures。 它会删除

找不到文件..

并替换为: 文件名:$ FileName 下载:

任何人都可以这样做吗?谢谢,如果可以的话!

2 个答案:

答案 0 :(得分:1)

我这样做是因为你似乎很年轻:

我会在上传表单中添加一个包含名为path的上传路径(作为其名称属性)的字段,只需输入或使用文件夹选择器选择上传路径:您可以遍历顶部使用PHP函数$folderscandir)上传目录($files=scandir($folder);)的级别。这会在$folder中提供所有文件和文件夹的列表。 (我们假设它包含文件夹foo和文件index.html)。此时,您将迭代$files - 函数提供的列表(scandir),并使用is_dir检查当前项目是否为目录。

function listFiles($directory)
{
    $files=scandir($directory);
    for($i=0; $i < count($files); $i++)
    {
        if(is_dir($files[$i]) && file_exists($files[$i]))
        {
            echo '<a href="javascript:getFolderContents('.json_encode($files[$i]).');">'.htmlentities($files[$i]).'</a>';
        }
    }
}
echo '<div id="uploadcontainer">';
listFiles($folder); //you must have declared $folder
echo '</div>';

如果是这样,您可以生成动态超链接,该超链接执行动态JavaScript功能。对于顶级,您只会收到一个链接,如:

<a href="javascript:getFolderContents('foo');">foo</a>`

当然,您需要定义函数getFolderContents,它是一个JavaScript函数,使用JSON或Ajax传递其参数的文件夹内容。

function getFolderContents(folder)
{
    Request=new XMLHttpRequest();
    Request.open("GET", "/getFolderContents.php?folder="+encodeURIComponent(folder), true);
    Request.onreadystatechange=function()
    {
        if(Request.readyState==4 && Request.status==200) //succeeded
        {
            document.getElementsByName("path")[0].value=folder+"/";
            document.getElementById("uploadcontainer").innerHTML=Request.responseText;
        }
    }
    Request.send(null);
}

当此请求发送到/getFolderContents.php时,您需要创建此PHP文件,只需复制函数listFiles(如上所示),然后执行以下代码:

listFiles($_GET["folder"]);

我没有测试过,只是快速编写,当然你已经根据自己的需要进行了调整。还有一些选项缺失,比如再次移动一个目录,因为这个脚本不允许你回来。

来自德国的致敬。

答案 1 :(得分:0)

您需要修改表单 - 例如

<form action="upload.php" method="post" enctype="multipart/form-data">
File: <input type="file" name="filename" /><br />
Directory: <select name="folder">
<option>Bob</option>
<option>Cody</option>
</select>
<input type="submit" value="Upload" />
</form>

上传.php文件

更改行:$ folder =“files /”;

$folder = $_POST[folder]."/";

确保您已创建目录Bob和Cody。

这应该让你开始。

尝试使用CSS

查看样式
<style>
.someclass{
  color:#FFF;
  font-weight:700;
}
</style>

<div class="someclass">White bold text</div>
<div class="someclass">Also White bold text</div>

我知道你只有13岁,所以坚持下去:)