def share(path): is_public = False is_private = False try: f = File.get(File.public_share_url == path) is_public = True except peewee.DoesNotExist: try: f = File.get(File.private_share_url == path) is_private = True except peewee.DoesNotExist: return jsonify(message='error'), 404 actual_filename = generate_filename(f.folder.name, f.filename) target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']), actual_filename) if not ((is_public and f.open_public_share) or (is_private and f.open_private_share)): return jsonify(message='error'), 404 s = URLSafeSerializer(app.config['SECRET_KEY'], expires_in=24 * 3600) args = request.args if args.get('download') == 'true': token = None cookies = request.cookies if 'token' in cookies: token = cookies['token'] try: data = s.loads(token) if data['path'] == path: if os.path.exists(target_file): return send_file(target_file) else: return jsonify(message='error'), 404 else: return jsonify(message='unauthorized'), 401 except: return jsonify(message='unauthorized'), 401 token = s.dumps({'path': path}).decode('utf-8') payload = { 'filename': f.filename, 'folder': f.folder.name, 'open_public_share': f.open_public_share, 'open_private_share': f.open_private_share, 'token': token, } if is_private: if 'password' not in args or args['password'] != f.private_share_password: payload['token'] = '' return jsonify(message='OK', data=payload)
def get(self, id, name='some_file.bin'): #try: id = int(id) #int(self.request.get('id')) file = File.get(db.Key.from_path('File', id)) #if file.content: file.incrementDownloadCount() import datetime lastmod = datetime.datetime.now() self.response.headers['Content-Type'] = "application/octet-stream" #self.response.headers['Cache-Control']= 'public, max-age=172800' #self.response.headers['Last-Modified'] = lastmod.strftime("%a, %d %b %Y %H:%M:%S GMT") #expires = lastmod + datetime.timedelta(days=365) #self.response.headers['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT") self.response.headers['Content-disposition'] = 'attachment; filename="%s"' % str(file.name) self.response.out.write(file.content) #self.response.headers['Cache-Control'] = "public, max-age=31536000" #self.response.headers['Content-Type'] = str(media_object.guessed_type) #except: # self.response.out.write('Sorry, There is no such file') #last_modified_string = media_object.creation.strftime("%a, %d %b %Y %H:%M:%S GMT") #self.response.headers['Cache-Control'] = "public, max-age=31536000" #self.response.headers['Content-Type'] = str(media_object.guessed_type) #self.response.headers['Last-Modified'] = last_modified_string #expires = media_object.creation + datetime.timedelta(days=30) #self.response.headers['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT") pass
def files(folder_name, filename): # Get the name path actual_filename = generate_filename(folder_name, filename) target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']), actual_filename) try: f = File.get(filename=filename) except peewee.DoesNotExist: return jsonify(message='error'), 404 if request.method == 'GET': args = request.args if 'query' in args and args['query'] == 'info': return jsonify(message='OK', data=model_to_dict(f)) if os.path.exists(target_file): return send_file(target_file) else: return jsonify(message='error'), 404 if request.method == 'DELETE': if os.path.exists(target_file): try: f.delete_instance() os.remove(target_file) return jsonify(message='OK') except Exception as e: app.logger.exception(e) return jsonify(message='error'), 500 else: return jsonify(message='error'), 404
def files(folder_name, filename): actrual_filename = generate_filename(folder_name, filename) target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']), actrual_filename) foreign_id = Folder.get(name=folder_name).id try: f = File.get(filename=filename).get(folder_id=foreign_id) except peewee.DoesNotExist: return jsonify(message='error'), 404 if request.method == 'GET': args = request.args if 'query' in args and args['query'] == 'info': return jsonify(message='OK', data=model_to_dict(f)), 201 if os.path.exists(target_file): return send_file(target_file) else: return jsonify(message='error'), 404 if request.method == 'DELETE': if os.path.exists(target_file): try: f.delete_instance() os.remove(target_file) return jsonify(message="OK"), 201 except Exception as e: app.logger.exception(e) return jsonify(message='error'), 500 else: return jsonify(message='error'), 404 if request.method == 'PATCH': share_type = request.args.get('shareType') if share_type == 'public': f.open_public_share = True f.open_private_share = False elif share_type == 'none': f.open_public_share = False f.open_private_share = False elif share_type == 'private': f.open_public_share = False f.open_private_share = True f.save() return jsonify(message='OK')
def files(folder_name, filename): actual_filename = generate_filename(folder_name, filename) target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']), actual_filename) try: f = File.get(filename=filename) except peewee.DoesNotExist: return jsonify(message='error'), 404 if request.method == 'GET': args = request.args if 'query' in args and args['query'] == 'info': return jsonify(message='OK', data=model_to_dict(f)) if os.path.exists(target_file): return send_file(target_file) else: return jsonify(message='error'), 404 if request.method == 'DELETE': if os.path.exists(target_file): try: f.delete_instance() os.remove(target_file) return jsonify(message='OK') except Exception as e: app.logger.exception(e) return jsonify(message='error'), 500 else: return jsonify(message='error'), 404 if request.method == 'PATCH': share_type = request.args.get('shareType') if share_type == 'private': f.open_private_share = True f.open_public_share = False elif share_type == 'public': f.open_private_share = False f.open_public_share = True elif share_type == 'none': f.open_public_share = False f.open_private_share = False f.save() return jsonify(message='OK')
def addFiles(files): print "have to check %d files" % len(files) errors = [] base = re.compile("^(.*)\.([\w]+)$") for file in files: if isinstance(file, File): continue f,revision = getFile(file) if not f: print "%s not found!" % file continue path = f['filepath'] f['id'] = f['fid'] f['filepath'] = f['filename'] f['filename'] = revision['description'] f['node'] = f['nid'] del(f['fid']) del(f['nid']) try: File.get(f['id']) print "file %s already there" % f['id'] continue except SQLObjectNotFound: file = File(**f) match = base.match(file.filepath) if not match: print "%s odd filename" % file.filename continue basename,ext = match.groups() if file.filemime[:5] == "video": download_from = "http://master/files/orbit/%s.flv" % urllib.quote(basename) download_to = "%s/movies/%s.flv" % (DOWNLOAD,basename) filename = basename + ".flv" alt = "%s/files/orbit/%s" % (DOWNLOAD,filename) elif file.filemime[:5] == "image": download_from = "http://master/%s" % urllib.quote(path) filename = basename + "." + ext download_to = "%s/images/%s" % (DOWNLOAD,filename) alt = "%s/%s" % (DOWNLOAD,path) elif file.filemime[:5] == "audio": download_from = "http://master/%s" % urllib.quote(path) filename = basename + "." + ext download_to = "%s/audio/%s" % (DOWNLOAD,filename) alt = "%s/%s" % (DOWNLOAD,path) if not os.path.isfile(download_to) and os.path.isfile(alt): print "copy %s" % basename shutil.copy(alt,download_to) elif not os.path.isfile(download_to): print "download %s" % basename urllib.urlretrieve(download_from, download_to) if not os.path.isfile(download_to): print "could not fetch %s!" % download_to errors.append(file) continue if file.filemime[:5] == "image": if file.filemime[6:] == "gif": print "convert gif" movie = '%s/movies/%s.flv' % (DOWNLOAD,basename) cmd1 = "ffmpeg -f gif -i '%s' -s 320x240 -y %s" % (download_to,movie) os.popen(cmd1) if not os.path.isfile(movie): print "%s cont execute!" % cmd1 errors.append(file) continue else: os.unlink(download_to) file.filemime = "video/flv" filename = basename + ".flv" else: download_to_old = "" if file.filemime[6:] != "jpeg": download_to_old = download_to download_to = download_to + ".jpg" filename = filename + ".jpg" shutil.move(download_to_old,download_to) cmd1 = "sips --getProperty pixelWidth '%s'" % download_to cmd2 = "sips --setProperty format jpeg --resampleWidth 400 '%s'" % download_to try: if int(os.popen(cmd1).readlines()[1][14:-1]) <> 400: os.popen(cmd2) file.filemime = "image/jpeg" except IndexError: print "%s cont execute!" % cmd2 errors.append(file) continue file.filepath = filename for e in errors: e.destroySelf()