Как сделать загрузчик в скрипте оболочки CGI

Я хочу сделать скрипт загрузки в CGI bash (скрипт оболочки)

с помощью "просмотреть" и "отправить" для загрузки файлов из него

примечание: загрузчик без ftp и без пользователя и пароля ftp, cpanel или sftp

or:

Я хочу сделать сценарий CGI «bash», чтобы он мог загружать файлы в Интернет.


person saba    schedule 31.08.2015    source источник
comment
Вам нужно предоставить дополнительную информацию. Например: -Что вы пробовали до сих пор?   -  person Ankit    schedule 31.08.2015
comment
: / мой вопрос был ясен - - как мы закодировали загрузчик, загрузчик использовался для загрузки файлов на сайт, и я хочу закодировать загрузчик в сценарии оболочки CGI, как можно - -   -  person saba    schedule 31.08.2015
comment
Посмотрите, поможет ли это - stackoverflow.com/questions/1894347/   -  person Ankit    schedule 31.08.2015
comment
не это помогает, я хочу сделать это в CGI и без ftp или sftp и без пользователя и пароля,   -  person saba    schedule 31.08.2015
comment
вверх, пожалуйста, нужна помощь -_-   -  person saba    schedule 02.09.2015


Ответы (1)


Я сделал это, используя пример в Загрузка двоичных файлов в Bash CGI Script но есть небольшая ошибка, которую мы исправили позже:

file=/tmp/$$-$RANDOM

# CGI output must start with at least empty line (or headers)
printf '\r\n'
  cat <<EOF
<html>
<head>
<title>Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
EOF

IFS=$'\r'
read -r delim_line

IFS=''
delim_line="${delim_line}--"$'\r'

read -r line
filename=$(echo $line | sed 's/^.*filename=//' | sed 's/\"//g' | sed 's/.$//')
fileext=${filename##*.}

while read -r line; do
    test "$line" = '' && break
    test "$line" = $'\r' && break
done

# Note: This will result in junk at end of line (see format above)
cat > $file

# Get the line count
LINES=$(wc -l $file | cut -d ' ' -f 1)

# Remove the last line
head -$((LINES - 1)) $file >$file.1

# Copy eveything but the last line to a temp file
head -$((LINES - 2)) $file.1 >$file.2

# Copy the new last line but remove trailing \r\n
tail -1 $file.1 > $file.3
tail -c 2 $file.3 > $file.5
CRLF=$(hexdump -ve '/1 "%.2x"' $file.5)
# Check if the last two bytes are \r\n
if [ "$CRLF" = "0d0a" ];then
   BYTES=$(wc -c $file.3 | cut -d ' ' -f 1)
   truncate -s $((BYTES-2)) $file.3
fi

rm $file.5
cat $file.2 $file.3 > $file.4
cp $file.4 $file

cat <<EOF
<h1>Upload Successful</h1>
EOF

cat <<EOF
</body>
</html>
EOF

exit 0
person parsley72    schedule 06.06.2017
comment
parsley72 очень классное решение, спасибо. Сейчас я использую ваш код на своем веб-сайте. ваше решение - единственное, которое я нашел во всем Интернете, которое работает для загрузки двоичных файлов. - person stefan-eibl; 03.07.2021