1

選択したファイルのファイルパスを取得したいのですが、ブラウザ自体のセキュリティ上、ファイルパスが読み取れません。
たとえば、Firefoxはfilename(ex test.txt)を読み取るだけです。
それについて懸念しているのですが、bashシェルスクリプトで選択したファイルボタンのファイルパスを読み取るにはどうすればよいですか?
ファイルパスが必要な理由は、ファイルをサーバーにアップロードしたいので、コマンドcpを使用して次のようにします。

cp filepath(and filename) serverpath

単純なボタン(type=fileの代わりにtype=button)を使用して、特別なメソッド(トリックを実行するためのtype = text)でそれを行うことはできますか?
私が試した元のコードは次のとおりです。

#!/bin/sh

#=================================================
#   PATH defination
# ================================================



#=================================================
#   Main
# ================================================
echo "Content-type: text/html"
echo "Pragma: no-cache"
echo ""
echo "<HTML><HEAD>"
echo "<meta http-equiv=content-type content=text/html; charset=UTF-8>"
echo "<TITLE>$msg010</TITLE>"
. ${WWW_SCRIPTS_LIB_PATH}/style-init.sh
echo "</HEAD>"
echo "<BODY>"
ShowSubLogo "$msg010"

if [ "$CONTENT_LENGTH" != "" ]; then
    read data
    filesplit1=`echo $data | awk -F'&' '{print $1}'`

if [ "$filesplit1" != "fileis=" ]; then
    filename=`echo $filesplit1 | sed "s/%20/ /g" | cut -f 2 -d "="`
fi

fi

echo "<br> </br>"
echo "<br> </br>"
echo "$msg050"
echo "<br> </br>"
echo "<form name=Updfw_form method=post action=EippsUpdate.cgi>"
echo "$msg020"
echo "<input name='fileis' id='UpLoad' type='file'>"
echo "<br> </br>"
echo "<input name='update' value='$msg030' class=bton_over value=\"$com010\" type='submit' onmouseover=\"this.className='bton_out'\" onmouseout=\"this.className='bton_over'\">"
echo "<input name='cancel' value='$msg040' class=bton_over value=\"$com010\" type='reset' onmouseover=\"this.className='bton_out'\" onmouseout=\"this.className='bton_over'\">"
echo "</form>"
echo "</BODY></HTML>"

ファイル名を読み取るだけで、cromeブラウザでは動作しません。

または、ユーザーが選択できるファイルをサーバーにアップロードする別の方法はありますか?私はbashシェルバージョンの例を検索し、めったに見ませんでした。

ファイルパス全体!または、ファイルをブラウザにアップロードしてください。

どんな答えでもありがたいです。

4

1 に答える 1

0

いいえ、ありません。IEはあなたに話すのにバグがあります。悪用する方法はよくわかりませんが、セキュリティ上の問題であると確信しています。

ユーザーがファイルをサーバーに保存するパスを入力する別の入力フィールドを追加する必要があります。

(特定のクライアントプログラムによって呼び出されるWebサービスではなく)人間によって操作されるWebアプリケーションに正直に言うと、クライアント上のパスとサーバー上のパスに共通点がある理由はわかりません。個別の入力フィールドを提供することにより、ユーザーがローカルマシン上の好きな場所にファイルを配置できるようになります。

それらが実際に同じである必要がある場合は、おそらくいくつかの一般的なアプリケーションがあり、適切なパスでアップロードを実行するスクリプトをバンドルできます(おそらく、受信スクリプトを呼び出すか、scpまたはsftpを使用してsshなどのより適切なプロトコルを介して)。

ちなみに、シェルは特殊文字を使用しているため、適切に保護するのがかなり難しいため、CGIプログラミングにはあまり適していません。

于 2012-12-13T07:01:55.770 に答える