> Clearly, the os.path.isfile() is never returning true, because once it does, > you'll get a string error on the next line. You need > > fn = basename + "." + str(count) > > or something similar. > > Anyway, isfile() needs a complete path, there's no way it can guess what > directory you plan to use. > > To build a complete path, you need something like: > > fullname = os.path.join('/var/www/apache2-default/', fn) > > You ought to use that on the actual open as well. As long as you're > hard-coding the path prefix, plain string concatenation can work, but > eventually you'll get the string from somewhere else, and what happens if > someone forgets the trailing slash? >
Thanks Dave, got it working with the following bit: # strip leading path from file name to avoid directory traversal attacks fn = os.path.basename(fileitem.filename) path = '/var/www/apache2-default/' filepath = path + fn # Include date in filename. filepath = filepath + "_" + datetime.datetime.now().strftime("%Y-%m-%d") count = 0 tmp_fn = filepath + "." + str(count) while os.path.isfile(tmp_fn): count += 1 tmp_fn = filepath + "." + str(count) filepath = tmp_fn # Get the new filename for the users viewing pleasure displaypath, tmp_split = os.path.split(filepath) # Open the file for writing f = open(filepath , 'wb', 10000) -- http://mail.python.org/mailman/listinfo/python-list