def prepareForUpload(self, environ, media_id, content_type, filename, filesize, meta=None, **kwargs): STORAGE_ENGINE = getStorageEngine() log.info("{self}.prepareForUpload({media_id},{content_type},{filename},{filesize})".format(**vars())) if not meta: meta = {} else: try: meta = json.loads(meta) except Exception as e: return {"success": False, "message": "Invalid JSON object given for `meta`"} media = fetch_row(Media, media_id) mediaFile = MediaFile() mediaFile.storage = STORAGE_ENGINE mediaFile.media = media mediaFile.media_id = media_id mediaFile.type = content_type mediaFile.meta = meta media.type = content_type mediaFile.display_name = filename mediaFile.size = filesize media.files.append(mediaFile) DBSession.add(media) DBSession.add(mediaFile) DBSession.flush() # This is to ensure that we don't allow any uploads that haven't been prepared for with prepareForUpload token = "".join(random.choice(string.ascii_uppercase + string.digits) for x in range(13)) upload_tokens[str(mediaFile.id)] = token return { "success": True, "id": mediaFile.id, "upload_url": "http://{host}{path}".format( host=environ["HTTP_HOST"], path=url_for( controller="upload_api/api/uploader", action="uploadFile", media_id=media_id, file_id=mediaFile.id ), ), "upload_headers": { "Content-Type": "application/octet-stream", "Cache-Control": "none", "X-File-Name": filename, "X-Upload-Token": token, }, "postprocess_url": "http://{host}{path}".format( host=environ["HTTP_HOST"], path=url_for( controller="upload_api/api/uploader", action="postprocessFile", media_id=media_id, file_id=mediaFile.id, ), ), }
def prepareForUpload(self, environ, media_id, content_type, filename, filesize, meta=None, **kwargs): STORAGE_ENGINE = getStorageEngine() log.info( "prepareForUpload({media_id},{content_type},{filename},{filesize})" .format(**vars())) if not meta: meta = {} else: try: meta = json.loads(meta) except Exception as e: return { "success": False, "message": "Invalid JSON object given for `meta`" } media = fetch_row(Media, media_id) mediaFile = MediaFile() mediaFile.storage = STORAGE_ENGINE mediaFile.media = media mediaFile.media_id = media_id mediaFile.type = content_type mediaFile.meta = meta media.type = content_type mediaFile.display_name = filename mediaFile.size = filesize media.files.append(mediaFile) DBSession.add(media) DBSession.add(mediaFile) DBSession.flush() # This is to ensure that we don't allow any uploads that haven't been prepared for with prepareForUpload token = ''.join( random.choice(string.ascii_uppercase + string.digits) for x in range(13)) upload_tokens[str(mediaFile.id)] = token return { "success": True, "id": mediaFile.id, "upload_url": "http://{host}{path}".format( host=environ['HTTP_HOST'], path=url_for(controller='upload_api/api/uploader', action='uploadFile', media_id=media_id, file_id=mediaFile.id)), "upload_headers": { "Content-Type": "application/octet-stream", "Cache-Control": "none", "X-File-Name": filename, "X-Upload-Token": token }, "postprocess_url": "http://{host}{path}".format( host=environ['HTTP_HOST'], path=url_for(controller='upload_api/api/uploader', action='postprocessFile', media_id=media_id, file_id=mediaFile.id)) }