실무교육중에 Pibo라는 소셜로봇을 사용해서 여러 기능을 개발하고 다뤄봤습니다.
교육을 받으면서 진행했던 프로젝트에서 필요한 부분들을 기억하기위해 작성합니다.
Flask Web Server에서 Storage 기능을 사용하고 싶었습니다.
Pibo라는 로봇에서 Flask Web Server를 돌렸고 Pibo의 기본 제어기는 Raspberry Pi였기에 충분히 Storage기능을 사용할 수 있었습니다.
프로젝트 진행중에 사용했던 코드이기에 미흡한 부분이 많은데 감안해주셨으면 좋겠습니다!!
# 파일 업로드
@app.route('/upload', methods = ['POST', 'GET'])
def upload_file():
if request.method == 'POST':
try:
f = request.files['file']
f.save('./uploads/' + secure_filename(f.filename)) # 파일명을 보호하기위한 함수, 지정된 경로에 파일 저장
return render_template('upload.html')
except:
return render_template('upload.html')
else:
return render_template('upload.html')
<body>
<br><br><br><br>
<center>
<form action = "/upload" method = "POST" enctype="multipart/form-data">
<input type = "file" name = "file" /><br><br><br><br>
<div id = "sub">
<input type="submit" value="업로드" />
</div>
</form>
</center>
</body>
</html>
1. app.route -> 웹서버주소/upload에 들어갈 경우 methods는 POST, GET이 있다는 의미입니다.
2. request.method로 현재 서버에 요청되어지는 메소드가 POST일 경우를 의미합니다.
3. request.files로 file이라는 type의 파일을 uploads폴더에 저장하고 파일명을 보호합니다.
4. render_templadte으로 Web Server 화면을 초기화시켜줍니다.
# 파일 다운로드
@app.route('/download', methods = ['GET', 'POST'])
def download_file():
files_list = os.listdir("./uploads")
if request.method == 'POST':
sw = 0
for x in files_list:
if(x==request.form['file']):
sw=1
try:
path = "./uploads/"
return send_file(path + request.form['file'],
download_name = request.form['file'],
as_attachment=True)
except:
print("download error")
return render_template('download.html', files=files_list)
<body>
<br><br><br><br>
<center>
<form action = "/download" method = "POST" enctype = "multipart/form-data">
<input type = "text" name = "file" style="background-color: white;" /><br><br><br><br>
<div id = "sub" >
<input type = "submit" value="다운로드"/>
</div>
<ul>
<br><br><br><br>
<div style="font-size:1.6em; color:rgb(175, 184, 178);">
파일 목록 <br><br>
{% for n in files %}
<li>{{n}}</li>
{% endfor %}
</ul>
</div>
</center>
</body>
</html>
1. files_list에 os함수를 이용하여 Pibo안에있는 uploads로 폴더경로를 지정하고 안에 파일 목록을 읽어왔습니다.
2. request.form으로 file이라는 name을 가진 파일을 path라는 경로에 저장하는 return값을 주었습니다.
# 파일 삭제
@app.route('/delete', methods = ['GET', 'POST'])
def delete_file():
files_list = os.listdir("./uploads")
if request.method == 'POST':
try:
path = "./uploads/"
os.remove(path+"{}".format(request.form['file']))
files_list = os.listdir("./uploads")
return render_template('delete.html', files=files_list)
except:
return render_template('delete.html', files=files_list)
else:
return render_template('delete.html', files=files_list)
<body>
<br><br><br><br>
<center>
<form action = "/delete" method = "POST" enctype="multipart/form-data">
<input type = "text" name = "file" style="background-color: white;"/><br><br><br><br>
<div id = 'sub'>
<input type="submit" value="삭제"/>
</div>
<div style="font-size:1.6em; color:rgb(175, 184, 178);">
<ul>
<br><br><br><br>
파일 목록<br><br>
{% for n in files %}
<li>{{n}}</li>
{% endfor %}
</ul>
</div>
</form>
</center>
</body>
</html>
1. os함수를 이용하여 path에 위치한 파일을 지우는데 파일명은 HTML에서 받아온 request.form['file']이란 파일이란 의미입니다.
2. render_templete으로 화면을 초기화시키지만 files=files_list로 파일의 목록을 초기화시켜줍니다.
'Python' 카테고리의 다른 글
파이썬-실습(1) 카카오톡 날씨 알림 프로젝트 (0) | 2021.11.21 |
---|---|
Crontab 사용법 (0) | 2021.11.18 |
Flask와 Django를 비교 (0) | 2021.11.17 |
HTML에서 받은 입력값을 DB로 보내기 (0) | 2021.10.18 |
파이썬 딕셔너리 사용법 (0) | 2021.09.16 |