def file_create_new_file(file): ret = {'code': config.CODE_OK} sid = utils.fetch_sid(file.filename) conditions = {'sid': sid} data = utils.jsonify_item_by(Student, conditions) # If student with sid doesn't exist, return 1 if data['code'] != config.CODE_OK: ret['code'] = config.CODE_ERROR return ret data = utils.jsonify_item_by(File, conditions) # This student never upload a file before if data['code'] != config.CODE_OK: current_category = Category.query.filter_by(is_current=True).first() doc = File( sid=sid, filename=file.filename, upload_time=datetime.datetime.now(), size=0, # Will modify later category_id=current_category.id) # Will modify later db.session.add(doc) db.session.commit() directory = os.path.join(settings.UPLOAD_DIR, current_category.name) if not os.path.exists(directory): os.mkdir(directory) path = os.path.join(directory, doc.filename) file.save(path) ret['code'] = config.CODE_OK ret['item'] = utils.serialize(doc) tools.send_msg_when_upload_new_file(sender, sid, file) return ret # This student replace old file with a new file # Remove old file item = data['item'] category = Category.query.filter_by(id=item['category_id']).first() old_path = os.path.join(settings.UPLOAD_DIR, category.name, item['filename']) os.remove(old_path) # Create new file new_path = os.path.join(settings.UPLOAD_DIR, category.name, file.filename) file.save(new_path) # Update file in table old_file = File.query.filter_by(sid=sid).first() old_file.filename = file.filename old_file.upload_time = datetime.datetime.now() db.session.commit() data = utils.jsonify_item_by(File, conditions) ret['code'] = data['code'] ret['item'] = data['item'] tools.send_msg_when_replace_file(sender, sid, file) return ret
def post(self, **kwargs): if self.form.validate(): title = self.form.title.data file_data = self.form.file_data.data uploaded_files = self.get_uploads('file_data') blob_info = uploaded_files[0] new_file = File(title=title, file_data=blob_info.key()) # checking the file response = redirect_to('admin/files/index') if new_file.put(): response.data = '' return response return self.get(**kwargs)