1

私は実際に約50の関連ページを検索しましたが、私の問題に似た問題は見られませんでした。送信ボタンを押すと、スクリプトが呼び出されますが、スクリプトは空のページを返し、ファイルがアップロードされていないことがわかります。コードに入力エラーはありません。何度かチェックしましたが、プロジェクトでこのコードを実行する必要があります。何が問題なのでしょう?私はubuntuの下でapacheを実行しています、そして私のコードは次のとおりです:

htmlコード:

<html><body>
<form enctype="multipart/form-data" action="save_file.py" method="post">
<p>File: <input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>
</body></html>

Pythonコード:

#!/usr/bin/env python
import cgi, os
import cgitb; cgitb.enable()

try: #windows needs stdio set for binary mode
    import msvcrt
    msvcrt.setmode (0, os.O_BINARY)
    msvcrt.setmode (1, os.O_BINARY)
except ImportError:
    pass

form = cgi.FieldStorage()

#nested FieldStorage instance holds the file
fileitem = form['file']

#if file is uploaded
if fileitem.filename:
    #strip leading path from filename to avoid directory based attacks
    fn = os.path.basename(fileitem.filename)
    open('/files' + fn, 'wb').write(fileitem.file.read())
    message = 'The file "' + fn + '" was uploaded successfully'
else:
    message = 'No file was uploaded'

print """\
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
""" % (message,)
4

1 に答える 1

1

スクリプトをテストしましたが、ローカルで機能するようにパスにいくつかの小さな修正を加えました。パスが正しく設定され、権限が適切に設定されている場合、このコードは正常に機能します。

確認すべき点は次のとおりです。

  1. htmlファイルのフォームプロパティで、cgi-binにあるpythonスクリプトを指していることを確認してくださいaction="/cgi-bin/save_file.py"。私の場合、Webサーバーのルートにcgi-binがあり、そこにpythonスクリプトを配置しました。Webサーバー上の標準のドキュメントの場所からスクリプトを実行している場合は機能しません

  2. save_file.pyに実行可能権限があることを確認してください。chmod 755 save_file.py

  3. save_file.pyで、保存するファイルを開くための有効なパスを作成していることを確認してください。私はテスト目的のためだけに私のものを絶対にしましたが、次のようなものです:open(os.path.join('/path/to/upload/files', fn)

これらのポイントが正しく設定されていれば、問題はありません。

于 2012-06-03T18:02:04.377 に答える