Update app.py
Browse files
app.py
CHANGED
|
@@ -6,12 +6,12 @@ from PIL import Image
|
|
| 6 |
|
| 7 |
def save_file(file_data, final_file_name):
|
| 8 |
"""
|
| 9 |
-
파일 데이터를 임시 폴더에 저장하고 최종 파일 경로를 반환.
|
| 10 |
final_file_name에는 확장자 포함.
|
| 11 |
"""
|
| 12 |
temp_file_path = os.path.join(tempfile.gettempdir(), final_file_name)
|
| 13 |
|
| 14 |
-
#
|
| 15 |
if isinstance(file_data, str) and os.path.exists(file_data):
|
| 16 |
with open(file_data, "rb") as f:
|
| 17 |
data = f.read()
|
|
@@ -35,87 +35,49 @@ def save_file(file_data, final_file_name):
|
|
| 35 |
|
| 36 |
return temp_file_path
|
| 37 |
|
| 38 |
-
def process_file(file
|
| 39 |
"""
|
| 40 |
-
업로드된 파일을 받아
|
|
|
|
| 41 |
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
name_option: 라디오 버튼 선택값 (네 가지 옵션 중 하나)
|
| 45 |
-
additional_name: 옵션에 따른 추가 입력(추가명 또는 변경할 파일명)
|
| 46 |
-
add_date: 날짜 적용 여부 (Boolean)
|
| 47 |
-
add_time: 시간 적용 여부 (Boolean)
|
| 48 |
-
|
| 49 |
-
반환값:
|
| 50 |
-
변경된 파일명을 가진 다운로드 가능한 파일 경로
|
| 51 |
"""
|
| 52 |
if file is None:
|
| 53 |
return None
|
| 54 |
|
| 55 |
-
# 원본 파일명
|
| 56 |
if isinstance(file, str) and os.path.exists(file):
|
| 57 |
original_filename = os.path.basename(file)
|
| 58 |
elif hasattr(file, "name"):
|
| 59 |
original_filename = os.path.basename(file.name)
|
| 60 |
else:
|
| 61 |
original_filename = "파일.bin"
|
| 62 |
-
|
| 63 |
original_name, ext = os.path.splitext(original_filename)
|
| 64 |
ext = ext.lstrip(".") if ext else "bin"
|
| 65 |
|
| 66 |
-
#
|
| 67 |
-
if name_option == "파일명변경":
|
| 68 |
-
# 입력된 새 파일명 사용 (없으면 기본값 "파일")
|
| 69 |
-
final_base = additional_name.strip() if additional_name.strip() else "파일"
|
| 70 |
-
elif name_option == "파일명유지":
|
| 71 |
-
final_base = original_name
|
| 72 |
-
elif name_option == "파일명유지 + 추가명":
|
| 73 |
-
final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
|
| 74 |
-
elif name_option == "추가명 + 파일명유지":
|
| 75 |
-
final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
|
| 76 |
-
else:
|
| 77 |
-
final_base = original_name
|
| 78 |
-
|
| 79 |
-
# 날짜 및 시간 stamp (한국 기준)
|
| 80 |
now = datetime.utcnow() + timedelta(hours=9)
|
| 81 |
-
date_str = now.strftime('%Y%m%d')
|
| 82 |
-
time_str = now.strftime('%H%M%S')
|
| 83 |
-
timestamp = ""
|
| 84 |
-
if date_str and time_str:
|
| 85 |
-
timestamp = f"_{date_str}_{time_str}"
|
| 86 |
-
elif date_str:
|
| 87 |
-
timestamp = f"_{date_str}"
|
| 88 |
-
elif time_str:
|
| 89 |
-
timestamp = f"_{time_str}"
|
| 90 |
|
| 91 |
-
# 최종 파일명 구성
|
| 92 |
-
final_file_name = f"{
|
| 93 |
|
| 94 |
return save_file(file, final_file_name)
|
| 95 |
|
| 96 |
iface = gr.Interface(
|
| 97 |
fn=process_file,
|
| 98 |
-
inputs=
|
| 99 |
-
gr.File(label="파일 업로드"),
|
| 100 |
-
gr.Radio(
|
| 101 |
-
choices=["파일명변경", "파일명유지", "파일명유지 + 추가명", "추가명 + 파일명유지"],
|
| 102 |
-
label="파일명 옵션"
|
| 103 |
-
),
|
| 104 |
-
gr.Text(label="추가명/변경 파일명 입력", placeholder="옵션에 따라 입력하세요"),
|
| 105 |
-
gr.Checkbox(label="날짜 적용", value=True),
|
| 106 |
-
gr.Checkbox(label="시간 적용", value=True)
|
| 107 |
-
],
|
| 108 |
outputs=gr.File(label="다운로드 파일"),
|
| 109 |
-
title="파일명
|
| 110 |
description=(
|
| 111 |
-
"업로드된 파일의
|
| 112 |
-
"
|
| 113 |
-
"옵션2(파일명유지): 원본 파일명 유지\n"
|
| 114 |
-
"옵션3(파일명유지 + 추가명): 원본 파일명 뒤에 추가명 부착\n"
|
| 115 |
-
"옵션4(추가명 + 파일명유지): 추가명을 원본 파일명 앞에 부착\n"
|
| 116 |
-
"날짜/시간 체크 시 해당 정보가 파일명 뒤에 추가됩니다."
|
| 117 |
)
|
| 118 |
)
|
| 119 |
|
| 120 |
if __name__ == "__main__":
|
| 121 |
-
iface.launch()
|
|
|
|
| 6 |
|
| 7 |
def save_file(file_data, final_file_name):
|
| 8 |
"""
|
| 9 |
+
파일 데이터를 임시 폴더에 저장하고 최종 파일 경로를 반환합니다.
|
| 10 |
final_file_name에는 확장자 포함.
|
| 11 |
"""
|
| 12 |
temp_file_path = os.path.join(tempfile.gettempdir(), final_file_name)
|
| 13 |
|
| 14 |
+
# 파일 경로로 전달된 경우
|
| 15 |
if isinstance(file_data, str) and os.path.exists(file_data):
|
| 16 |
with open(file_data, "rb") as f:
|
| 17 |
data = f.read()
|
|
|
|
| 35 |
|
| 36 |
return temp_file_path
|
| 37 |
|
| 38 |
+
def process_file(file):
|
| 39 |
"""
|
| 40 |
+
업로드된 파일을 받아 원본 이름에 날짜와 시간 정보를 추가하여 저장합니다.
|
| 41 |
+
항상 '파일명유지' 옵션으로 동작하며, 날짜와 시간은 한국 시간(UTC+9)을 기준으로 합니다.
|
| 42 |
|
| 43 |
+
예)
|
| 44 |
+
sample.jpg → sample_20250214_174436.jpg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
"""
|
| 46 |
if file is None:
|
| 47 |
return None
|
| 48 |
|
| 49 |
+
# 원본 파일명 추출
|
| 50 |
if isinstance(file, str) and os.path.exists(file):
|
| 51 |
original_filename = os.path.basename(file)
|
| 52 |
elif hasattr(file, "name"):
|
| 53 |
original_filename = os.path.basename(file.name)
|
| 54 |
else:
|
| 55 |
original_filename = "파일.bin"
|
| 56 |
+
|
| 57 |
original_name, ext = os.path.splitext(original_filename)
|
| 58 |
ext = ext.lstrip(".") if ext else "bin"
|
| 59 |
|
| 60 |
+
# 한국 시간 기준 날짜 및 시간 stamp 생성
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
now = datetime.utcnow() + timedelta(hours=9)
|
| 62 |
+
date_str = now.strftime('%Y%m%d')
|
| 63 |
+
time_str = now.strftime('%H%M%S')
|
| 64 |
+
timestamp = f"_{date_str}_{time_str}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
|
| 66 |
+
# 최종 파일명 구성
|
| 67 |
+
final_file_name = f"{original_name}{timestamp}.{ext}"
|
| 68 |
|
| 69 |
return save_file(file, final_file_name)
|
| 70 |
|
| 71 |
iface = gr.Interface(
|
| 72 |
fn=process_file,
|
| 73 |
+
inputs=gr.File(label="파일 업로드"),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
outputs=gr.File(label="다운로드 파일"),
|
| 75 |
+
title="파일명 변경 및 다운로드",
|
| 76 |
description=(
|
| 77 |
+
"업로드된 파일의 원본 이름에 한국 시간 기준의 날짜와 시간이 추가되어 저장됩니다.\n"
|
| 78 |
+
"예) sample.jpg → sample_20250214_174436.jpg"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
)
|
| 80 |
)
|
| 81 |
|
| 82 |
if __name__ == "__main__":
|
| 83 |
+
iface.launch()
|