def upload_file(request): """ Process file upload request """ c = {'errors': {}} c['file'] = File() # process file upload # extract file params etc req = ('filedata', 'filename', 'dltype') for x in req: if x not in request.POST: return HTTPBadRequest() hfile = request.POST['filedata'] # guess content type content_type = guess_type(hfile.filename)[0] or 'application/octet-stream' dbsession = DBSession() now = datetime.utcnow() file = dbsession.query(File).filter(File.name==request.POST['filename']).first() if file is None: file = File() file.name = request.POST['filename'] file.size = len(hfile.value) file.dltype = 'download' if request.POST['dltype'] == 'download' else 'auto' file.content_type = content_type file.updated = h.dt_to_timestamp(now) # save file to the storage storage_dirs = get_storage_dirs() orig_filename = os.path.join(storage_dirs['orig'], file.name) fp = open(orig_filename, 'wb') shutil.copyfileobj(hfile.file, fp) hfile.file.close() fp.close() dbsession.add(file) dbsession.flush() dbsession.expunge(file) try: transaction.commit() except IntegrityError: # display error etc transaction.abort() return HTTPFound(location=route_url('admin_list_files', request)) return HTTPFound(location=route_url('admin_list_files', request))