├── requirements.txt ├── templates ├── browser.html ├── manage.html └── index.html ├── README.md └── app.py /requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==0.11.1 2 | Flask-Uploads==0.2.1 3 | Flask-WTF==0.13.1 4 | -------------------------------------------------------------------------------- /templates/browser.html: -------------------------------------------------------------------------------- 1 | 2 | File Browser 3 |

File Browser

4 | Upload / 5 | Manage 6 |
7 | 8 |

URL: {{ file_url }}

9 | 10 | -------------------------------------------------------------------------------- /templates/manage.html: -------------------------------------------------------------------------------- 1 | 2 | File Manager 3 |

File Manager

4 | Upload / 5 | Manage 6 |
7 | 8 | {% for photo in files_list %} 9 | - {{ photo }} 10 | open 11 | del
12 | {% endfor %} -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | Upload File 3 |

Upload File

4 | Upload / 5 | Manage 6 |
7 | 8 |
9 | {{ form.hidden_tag() }} 10 | {{ form.photo(multiple="multiple")}} 11 | {% for error in form.photo.errors %} 12 | {{ error }} 13 | {% endfor %} 14 | {{ form.submit }} 15 |
16 | 17 | {% if success %} 18 |
19 |

Upload Success!

20 | {% endif %} 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cloud-Drive 2 | A minimal photo upload and manage system with Flask and Flask-Uploads (Multiple file upload support!). 3 | 4 | ## Extensions 5 | Flask-Uploads==0.2.1 6 | Flask-WTF==0.13.1 7 | 8 | 9 | ## Installation 10 | First, clone it from github: 11 | ``` 12 | git clone https://github.com/helloflask/cloud-drive.git 13 | ``` 14 | 15 | Then run it (make sure all extensions above were installed): 16 | ``` 17 | python app.py 18 | ``` 19 | 20 | Now Go to http://127.0.0.1:5000/ 21 | 22 | 23 | ## More details 24 | 关于这个项目的详细介绍:[Flask文件上传](https://zhuanlan.zhihu.com/p/24429519) 25 | 更多关于Flask的原创优质内容,欢迎关注[Hello, Flask!——知乎专栏](https://zhuanlan.zhihu.com/flask) 26 | 一个更完善的版本:https://github.com/greyli/flask-file-uploader 27 | 28 | ## License 29 | This demo application is licensed under the MIT license: http://opensource.org/licenses/mit-license.php 30 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import time 4 | import hashlib 5 | 6 | from flask import Flask, render_template, redirect, url_for, request 7 | from flask_uploads import UploadSet, configure_uploads, IMAGES, patch_request_class 8 | from flask_wtf import FlaskForm 9 | from flask_wtf.file import FileField, FileRequired, FileAllowed 10 | from wtforms import SubmitField 11 | 12 | app = Flask(__name__) 13 | app.config['SECRET_KEY'] = 'I have a dream' 14 | app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd() + '/static' 15 | 16 | photos = UploadSet('photos', IMAGES) 17 | configure_uploads(app, photos) 18 | patch_request_class(app) # set maximum file size, default is 16MB 19 | 20 | 21 | class UploadForm(FlaskForm): 22 | photo = FileField(validators=[FileAllowed(photos, u'Image Only!'), FileRequired(u'Choose a file!')]) 23 | submit = SubmitField(u'Upload') 24 | 25 | 26 | @app.route('/', methods=['GET', 'POST']) 27 | def upload_file(): 28 | form = UploadForm() 29 | if form.validate_on_submit(): 30 | for filename in request.files.getlist('photo'): 31 | name = hashlib.md5('admin' + str(time.time())).hexdigest()[:15] 32 | photos.save(filename, name=name + '.') 33 | success = True 34 | else: 35 | success = False 36 | return render_template('index.html', form=form, success=success) 37 | 38 | 39 | @app.route('/manage') 40 | def manage_file(): 41 | files_list = os.listdir(app.config['UPLOADED_PHOTOS_DEST']) 42 | return render_template('manage.html', files_list=files_list) 43 | 44 | 45 | @app.route('/open/') 46 | def open_file(filename): 47 | file_url = photos.url(filename) 48 | return render_template('browser.html', file_url=file_url) 49 | 50 | 51 | @app.route('/delete/') 52 | def delete_file(filename): 53 | file_path = photos.path(filename) 54 | os.remove(file_path) 55 | return redirect(url_for('manage_file')) 56 | 57 | 58 | if __name__ == '__main__': 59 | app.run(debug=True) --------------------------------------------------------------------------------