1

私のウェブサイトの特定のディレクトリにファイルをアップロードできるようにするこのコードがありますが、アップロードされるすべてのファイル (.txt ファイルのみ) の名前を「equations.txt」に変更してから、私のし、サーバーから削除します。

たとえば、誰かが「test.txt」というファイルをアップロードした場合、それをアップロードしてから、サーバーで「equations.txt」に名前を変更する必要があります。

これまでのところ、アップロードすることができましたが、次の行を追加すると:

os.renames('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'equations.txt')

ディレクトリ内のファイルの名前を「equations.txt」に変更するのではなく、実際に/uploads/ディレクトリを完全に削除します...コードは次のとおりです。

#! /usr/bin/python

import cgi, os
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

# Get filename here.
fileitem = form['filename']

# Test if the file was uploaded
if fileitem.filename:
   # strip leading path from file name to avoid 
   # directory traversal attacks
   fn = os.path.basename(fileitem.filename)
   open('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'wb').write(fileitem.file.read())
   message = "The file " + fn + " was uploaded successfully"
   os.renames('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'equations.txt') ## Error line

else:
   message = "No file was uploaded"

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

/uploads/上記の行を追加しなくても、コードは正常に機能し、ファイルをディレクトリにアップロードします。次のステップに進む前に、適切に名前を変更する必要があります。

4

1 に答える 1

1

os.rename代わりに試しましたos.renamesか?

また、宛先の絶対パスを試してください。したがって、この:

dest_dir = '/home/xxxx/public_html/xxxx.com/test/uploads/'
os.rename(dest_dir + fn, dest_dir + 'equations.txt')

これの代わりに:

os.renames('/home/xxxx/public_html/xxxx.com/test/uploads/' + fn, 'equations.txt')
于 2013-04-15T01:20:21.933 に答える