def upload(request):
rev_file = request.FILES.get('apk')
if not rev_file:
return JsonResponse({'code':0, 'msg':'文件不存在!'})
dt_datetime = datetime.datetime.now()
str_time = dt_datetime.strftime('%Y%m%d')
print(type(str_time))
print(str_time)
new_name = r"C" +"+" +"+"+"SDK" + str_time
print(type(new_name))
print(new_name)
file_path = os.path.join(settings.MEDIA_ROOT, new_name + os.path.splitext(rev_file.name)[1] )
try:
f = open(file_path,'wb')
for i in rev_file.chunks():
print(i)
f.write(i)
f.close()
return JsonResponse({'code': 1, 'name': new_name + os.path.splitext(rev_file.name)[1]})
except Exception as e:
return JsonResponse({'code':0, 'msg':str(e)})
要配合vue的分片上传
【以下回答由 GPT 生成】
shutil
库,使用shutil.move()
函数代替逐块写入文件的方式,以提高效率。uuid
库生成唯一的文件名,可以用于避免重复文件名的冲突。os.path.join()
函数代替字符串拼接路径,以保证在不同操作系统上的兼容性。settings
模块来获取配置的媒体文件路径,以增加代码的灵活性和可维护性。下面是优化后的代码示例:
import os
import datetime
import shutil
import uuid
from django.conf import settings
from django.http import JsonResponse
def upload(request):
rev_file = request.FILES.get('apk')
if not rev_file:
return JsonResponse({'code': 0, 'msg': '文件不存在!'})
dt_datetime = datetime.datetime.now()
str_time = dt_datetime.strftime('%Y%m%d')
new_name = "C++" + "++" + "SDK" + str_time + str(uuid.uuid4().hex)
file_path = os.path.join(settings.MEDIA_ROOT, new_name + os.path.splitext(rev_file.name)[1])
try:
with open(file_path, 'wb') as f:
shutil.copyfileobj(rev_file, f)
return JsonResponse({'code': 1, 'name': new_name + os.path.splitext(rev_file.name)[1]})
except Exception as e:
return JsonResponse({'code': 0, 'msg': str(e)})
以上是对代码的优化建议,根据具体需求和实际情况,你还可以结合其他功能进行适当的改进和完善。
【相关推荐】