def downloadlist(request, funid):
if request.user.is_authenticated():
errors = []
if request.method == 'POST':
file_remark = request.POST.get("file_remark", "")
my_file = request.FILES.get("myfile", None)
if not my_file:
errors.append("請選擇要導入的文件。")
else:
if os.sep in my_file.name:
errors.append(r"""請注意文件命名格式,'\ / " * ? < > '符號文件不允許上傳。""")
else:
myfilepath = settings.BASE_DIR + os.sep + "faconstor" + os.sep + "upload" + os.sep + "knowledgefiles" + os.sep + my_file.name
c_exist_model = KnowledgeFileDownload.objects.filter(file_name=my_file.name).exclude(state="9")
if os.path.exists(myfilepath) or c_exist_model.exists():
errors.append("該文件已存在,請勿重復上傳。")
else:
with open(myfilepath, 'wb+') as f:
for chunk in my_file.chunks(): # 分塊寫入文件
f.write(chunk)
# 存入字段:備注,上傳時間,上傳人
c_file = KnowledgeFileDownload()
c_file.file_name = my_file.name
c_file.person = request.user.userinfo.fullname
c_file.remark = file_remark
c_file.upload_time = datetime.datetime.now()
c_file.save()
errors.append("導入成功。")
return render(request, "downloadlist.html",
{'username': request.user.userinfo.fullname, "errors": errors,
"pagefuns": getpagefuns(funid, request=request)})
else:
return HttpResponseRedirect("/login")
def download_list_data(request):
if request.user.is_authenticated():
result = []
c_files = KnowledgeFileDownload.objects.exclude(state="9")
if c_files.exists():
for file in c_files:
result.append({
"id": file.id,
"name": file.person,
"up_time": "{0:%Y-%m-%d %H:%M:%S}".format(file.upload_time),
"remark": file.remark,
"file_name": file.file_name,
})
return JsonResponse({
"data": result
})
def knowledge_file_del(request):
if request.user.is_authenticated():
file_id = request.POST.get("id", "")
assert int(file_id), "網頁異常"
c_file = KnowledgeFileDownload.objects.filter(id=file_id)
if c_file.exists():
c_file = c_file[0]
c_file.delete()
c_file_name = c_file.file_name
the_file_name = settings.BASE_DIR + os.sep + "faconstor" + os.sep + "upload" + os.sep + "knowledgefiles" + os.sep + c_file_name
if os.path.exists(the_file_name):
os.remove(the_file_name)
result = "刪除成功。"
else:
result = "文件不存在,刪除失敗,請於管理員聯系。"
return JsonResponse({
"data": result
})
def download(request):
if request.user.is_authenticated():
file_id = request.GET.get("file_id", "")
assert int(file_id), "網頁異常"
c_file = KnowledgeFileDownload.objects.filter(id=file_id)
if c_file.exists():
c_file = c_file[0]
c_file_name = c_file.file_name
else:
raise Http404()
try:
the_file_name = settings.BASE_DIR + os.sep + "faconstor" + os.sep + "upload" + os.sep + "knowledgefiles" + os.sep +c_file_name
response = StreamingHttpResponse(file_iterator(the_file_name))
response['Content-Type'] = 'application/octet-stream; charset=unicode'
response['Content-Disposition'] = 'attachment;filename="{0}"'.format(escape_uri_path(c_file_name)) # escape_uri_path()解決中文名文件(from django.utils.encoding import escape_uri_path)
return response except: return HttpResponseRedirect("/downloadlist") else: return HttpResponseRedirect("/login")
<div id="static1" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title">上傳</h4>
</div>
<div class="panel-body">
<form action="" enctype="multipart/form-data" class="form-horizontal"
method="post">{% csrf_token %}
<div class="form-body">
<div class="form-group">
<div class="fileinput fileinput-new col-md-2" data-provides="fileinput" style="position: relative;left: 30px;width:500px">
<span class="btn green btn-file">
<span class="fileinput-new"> 選擇文件 </span>
<span class="fileinput-exists"> 重新選擇 </span>
<input type="file" name="myfile"/> </span>
<span class="fileinput-filename"> </span>
<a href="javascript:;" class="close fileinput-exists"
data-dismiss="fileinput"> </a>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><span
style="color:red; "></span>備注</label>
<div class="col-md-10">
<input id="file_remark" type="text" name="file_remark" class="form-control "
placeholder="">
<div class="form-control-focus"></div>
</div>
</div>
</div>
<div class="form-actions ">
<div class="modal-footer">
<button type="submit" id="upload" name="upload" class="btn green uppercase">上傳</button>
<button type="button" data-dismiss="modal" class="btn dark btn-outline">關閉
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<link href="/static/assets/global/plugins/bootstrap-fileinput/bootstrap-fileinput.css" rel="stylesheet"
type="text/css"/>
<link href="/static/assets/global/plugins/datatables/datatables.min.css" rel="stylesheet" type="text/css"/>
<link href="/static/assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.css" rel="stylesheet"
type="text/css"/>
<script src="/static/assets/global/plugins/datatables/datatables.min.js" type="text/javascript"></script>
<script src="/static/assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.js"
type="text/javascript"></script>
<script src="/static/assets/global/plugins/bootstrap-fileinput/bootstrap-fileinput.js"
type="text/javascript"></script>