欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django之向服务器上传文件

程序员文章站 2022-06-03 10:42:23
...

Django上传文件有三种方式。
方式一:通过form表单提交到后台;
方式二:通过ajax提交;
方式三:通过iframe提交。

我这里实现的是第一种方法,源码也是借鉴别人的,然后稍作修改。但是在查找的过程中因为自己在这方面是小白,大神们的教程里给出代码后具体一些细节上的设置基本都是几句话概括,让我在这里花了一些时间去摸索。所以为了有像我一样的小白免去这个过程,就把我通过百度摸索出来的步骤分享一下。

Step1:创建存放.html的文件夹,这里我创建的文件夹名为uploadpic,文件夹的名字是什么都无所谓,只不过需要在settings.py中需要申明该文件夹,具体在后续步骤中提到。
Django之向服务器上传文件
Step2:在uploadpic文件夹中创建一个uploadfile.html,代码如下。代码中action = "/upload_file/"这部分,等号右边的名称可以随便去,但是在urls.py中需要将其关联起来。

Title {% csrf_token %}

Step3:在views.py中写好响应函数,这里需要两个响应函数。一个是加载html的响应函数,还有一个是上传文件的响应函数。具体如下:

#加载html响应函数
def upload_html(request):
	return render(request, 'uploadfile.html') 

#文件上传响应函数
def uploadfile(request):      
	if request.method == "POST":    # 请求方法为POST时,进行处理          
		myFile = request.FILES.get("pic1", None)    # 获取上传的文件,如果没有文件,则默认为None         
		print("myfile: ", myFile)         
		if not myFile:              
			return HttpResponse("no files for upload!")          
		destination = open(os.path.join("/home/linux/Desktop/upload",myFile.name),'wb+')    # 打开特定的文件进行二进制的写操作          
		for chunk in myFile.chunks():      # 分块写入文件              
			destination.write(chunk)          
		destination.close()          
			return HttpResponse("upload over!")

注意:myFile = request.FILES.get(“pic1”, None)这里的pic1和.html文件中的对应。
open(os.path.join("/home/linux/Desktop/upload", myFile.name),‘wb+’)的路径根据自己想要存放的位置填写。

Step4: 在settings.py文件中申明自己html文件所在文件夹的位置。找到下面的代码块
TEMPLATES = [
{ ‘BACKEND’:‘django.template.backends.django.DjangoTemplates’, ‘DIRS’: [],
‘APP_DIRS’: True,
‘OPTIONS’: {
‘context_processors’: [
‘django.template.context_processors.debug’, ‘django.template.context_processors.request’, ‘django.contrib.auth.context_processors.auth’, ‘django.contrib.messages.context_processors.messages’, ],
},
},]
在DIRS这行填写路径,如下:
‘DIRS’: [os.path.join(BASE_DIR, ‘uploadpic’)],

Setp5:在urls.py中填写自己的响应函数位置,如下:

from django.contrib import adminfrom django.urls
import pathfrom upload import views as upload_views

urlpatterns = [ path('admin/', admin.site.urls),    
		path('', upload_views.upload_html), 
		path('upload_file/', uoload_views.uploadfile),]

path(’’, upload_views.upload_html) 说明进如网站直接响应upload_html函数path(‘upload_file/’, upload_views.uploadfile) 中’upload_file/'和.html中的action的值对应,是上传文件后的响应函数。

Step6:在终端进入manage.py所在的文件夹,然后输入python manage.py runserver 0.0.0.0:8000。 我的网页代码是在虚拟机ubuntu上运行的,然后本机通过虚拟机ip:8000访问网页,如下

Django之向服务器上传文件

然后选择自己要上传的文件,点击上传即可,然后在自己保存文件的文件夹中查看。
Django之向服务器上传文件

Django之向服务器上传文件
Django之向服务器上传文件