LINUX.ORG.RU

[noServer] Чтение каталога и выдача списка файлов


0

0

С помощью чего можно такое организовать? Вывод списка в html-страницу. Т.е. при загрузке он читает директорию и показывает список файлов.

Насколько я знаю, JS функцией работы с файловой системей не обременён. Или всё таки нет?

Выполнить это нужно без всяких серверных технологий, т.к. читаться файлик будет с диска и на разных компьютерах.

Заранее спасибо:)

В JS, вообще-то, по соображениям безопасности такой возможности нет, так же как нет возможности автоматом загрузить на сервер какой-нибудь пользовательский файл.

А чем вам не нравится использование CGI? Например, так:

#!/bin/sh
echo -e "Content-type: text/html\n"
cat "char.txt"
echo "<title>Files viewer</title>"
echo "<body>"
eval `./convert`

REALDIR=`echo $DIR | sed -e 's|/Inc|/var/www/tmp/Incoming|' -e 's|/^||'`

UP=`./back  "$DIR"`

Descr="descript.ion"
Name () # this function returns file description
{
    if [ ! -e "$DIR/$Descr" ]; then
	echo -e "$*\c"
	return
    fi
    name=`cat "$DIR/$Descr"|grep "^$*:"|awk -F: '{print $2}'`
    if [ "$name" != "" ]; then 
	echo -e "$name\c"
    else
	echo -e "$*\c"
    fi
}

conv_ ()
{
	echo $* | hexdump -ve '"\\" 1/1 "%02x"' | sed -e "s/\\\/%/g" -e "s/%2f/\//g" -e "s/%0a//" -e "s/\/\//\//g"
}

COL1="<td><input type=checkbox></td>"
COL3="<td></td>"
COL5="<td></td>"

linkfile ()
{
	D=`conv_ $DIR/$1`
	SIZE=`du -b "$2/$1" | awk '{print $1}'`
	echo "<tr><td><input type=checkbox name=\"file\" id=\"$2/$1\"</td>"
	echo "<td align=right><div class=ralign onClick='get_file(\"$D\");'>"
	Name "$1"
	echo "</div></td>${COL3}<td>$SIZE</td>${COL5}</tr>"
}

linkdir ()
{
	dr=`basename "$1"`
        if [ ! `echo "$dr"|grep "_files"` -a ! `echo "$dr"|grep ".files"` ]; then
    D=`conv_ $DIR/$dr`
	echo "<tr><td><input type=checkbox name=\"dir\" id=\"$1\"</td>"
    echo "<td align=right><div class=boldstring onClick='get_content(\"$D\");'>"
    Name "$dr"
    echo "</div></td>${COL3}<td>директория</td>${COL5}</tr>"
	fi
}

linkback ()
{
    [ "$UP" = "" ] && return 0
    D=`conv_ $UP`
    echo "<tr>${COL1}<td><div class=string onClick='get_content(\"$D\");'>../</div></td>${COL3}<td>"
    echo "<div class=string onClick='get_content(\"$D\");'>назад</div></td>${COL5}</tr>"
}

echo "<table cols=5><thead><th width=20px></th><th align=center>Имя</th><th width=10px></th>"
echo "<th align=center>Размер (байт)</th><th width=10px></th></thead><tbody>"
linkback
find "$REALDIR" -maxdepth 1 -mindepth 1 -type d | while read F
do
    linkdir "$F"
done

find "$REALDIR" -maxdepth 1 -type f | while read F
do
	F=`basename "$F"`
    if [ "$F" != "Descript.ion" -a "$F" != "descript.ion" ]; then
        linkfile "$F" "$REALDIR"
    fi
done
linkback
echo "</tbody></table>"
echo "</body>"

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

А если чтобы генерил сразу при загрузке страницы? И на оффтопике тоже?:)

По сути, доустановка питона, если что, тоже возможна.

mega_venik ★★★ ()
Ответ на: комментарий от mega_venik

А если чтобы генерил сразу при загрузке страницы?

<body onLoad="makeList();" ...
...
<div id="FLcontainer"></div>

function makeList(dir_){
	if(dir_) current_dir_ = dir_;
	else dir_ = current_dir_;
	request = new XMLHttpRequest();
	request.open("POST", "https://your.server/cgi-bin/filemanager", true);
	request.setRequestHeader("Accept-Language", "ru, en");
	request.setRequestHeader("Content-Type", "text/html");
	request.onreadystatechange=function(){
		if (request.readyState != 4) return;
		clearTimeout(timeout);
		if (request.status == 200){
			document.getElementById('FLcontainer').innerHTML = request.responseText;
		}
		else{
			handleError(request.statusText); 
		}
	}
	request.send('DIR=' + dir_);
	var timeout = setTimeout(function(){request.abort(); handleError("Time over");}, 5000);
}

элементарно.

Под мастдай сами думайте как делать - я в помойных ямах не ковыряюсь.

Eddy_Em ☆☆☆☆☆ ()

>без всяких серверных технологий
никак нельзя, если только ты информацию будешь в кукисах хранить

dimon555 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.