【发布时间】:2021-03-29 20:20:10
【问题描述】:
我正在使用不允许重新排序文件的基本多次上传 Javascript。我希望能够拖放图片并将它们的新位置保存在服务器上。 棘手的部分是我没有将这些文件存储在数据库中。
上传过程就是这样工作的:如您所见,这是一个简单的循环,将图片从 001.jpg 重命名为 099.jpg 并将它们放在正确的文件夹中。
if(isset($_FILES['images']) && $_FILES['images']['size'] > 0) {
if(!file_exists('images/upload/' . $id_client . '/photos/' . $gallery)) {
mkdir('images/upload/' . $id_client . '/photos/' . $gallery);
}
else {
$gallery = $data_m[0]['gallery'];
}
$i = htmlspecialchars(trim($_POST['nb_img']) + 1);
foreach($_FILES['images']['tmp_name'] as $index => $tmpName) {
if(!empty($tmpName) && is_uploaded_file($tmpName)) {
if(substr($_FILES['images']['type'][$index], 0, 5) == "image") {
if($i < 10) {
$img_url = '00' . $i . '.' . pathinfo($_FILES['images']['name'][$index], PATHINFO_EXTENSION);
}
else {
$img_url = '0' . $i . '.' . pathinfo($_FILES['images']['name'][$index], PATHINFO_EXTENSION);
}
move_uploaded_file( $tmpName, $dir_upload . '/photos/' . $gallery . '/'. $img_url);
}
}
$i++;
}
}
显示很简单:页面只是检查文件夹并按字母顺序显示内容:
if(!empty($data['gallery']) && file_exists($dir_upload . '/photos/' . $data['gallery'])) {
$dirname = $dir_upload . '/photos/' . $data['gallery'];
$gallery = scandir($dirname);
asort($gallery);
$row = 1;
echo '<div class="gallery">';
echo '<div class="row">';
foreach($gallery as $pix) {
if(!empty($pix) && $pix != '.' && $pix != '..') {
if($row >5) {
echo '</div>';
echo '<div class="row">';
$row = 1;
}
$url_img = $dirname . '/' . $pix;
echo '<a class="col-md mt-1 mr-1 mb-1 ml-1 btn btn-secondary img-'.$row.' disabled" href="' . $url_img . '" rel="clearbox[gallery=' . $data['gallery'] . ']" style="background:url(' . $url_img . ') center; background-size:cover; height:210px;">';
echo '</a>';
$row++;
}
}
echo '</div>';
echo '</div>';
}
我的迫切需要是能够简单地拖放图片并在服务器上重命名它们。例如,如果我将 005.jpg 拖到第三个位置,它会将其重命名为 002-1608378266.jpg(添加实际的时间戳,使其将自身放置在 003.jpg 之前,而不会删除之前的文件)。
我知道这不是最佳选择(甚至不确定这是否可行),而且我已经在研究数据库解决方案,但我需要一个紧急解决方案来让用户在开发新脚本时冷静下来。
您可以使用 id 和密码查看测试服务器 Stackoverflow:https://www.0000.yelofox.fr/page-10-at-vero-eos-et-accusam
感谢那些愿意帮助我的人!
【问题讨论】:
-
作为紧急替代方案,将订单保存在 JSON 文件中比尝试一个接一个地重命名图片更容易
-
我对 JSON 不熟悉,但找到了一些教程。所以每个对象都将是我的一张图片,我可以使用和“订购”属性?
-
是的,基本上,您可以创建一个包含文件名称的数组,其中包含正确的顺序(您可以操作)。您需要的主要功能是
file_get_contents(从文件中检索 JSON 字符串)、json_decode(将 JSON 字符串解析为您可以操作的数组) i>、json_encode(将其转换回 JSON) 和file_put_contents将其保存到文件中。我找到了this example。你不需要做他们所做的一切,但它可能会对你有所帮助。 -
提示:您的问题对于 StackOverflow 来说似乎太宽泛了。如果我没记错的话,你问的是如何处理前端,如何处理后端?我们不知道您的前端代码是什么样的(链接不起作用,您应该将我们需要的所有信息都放在问题本身中),至于后端,您'重新向我们展示上传图片时会发生什么,但我猜图片可以稍后重新排序?尝试将您的问题分解为多个较小的步骤,为每个步骤寻找解决方案,并编辑您的问题以使其更具体
-
差不多就是这样。文件只是上传(代码部分 1)并显示(代码部分 2)。不幸的是,我没有什么可以添加的了,因为我还没有实现任何拖放脚本。至于链接,它只是应该显示上下文(我很惊讶它对你不起作用)。
标签: javascript php ajax image upload