使用Form表单上传文件

  • upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> {# 上传文件的时候必须要在form标签中添加属性 enctype="multipart/form-data" #}
<form method="POST" action="/upload/" enctype="multipart/form-data"> <input type="text" name="user" />
<input type="file" name="img" />
<input type="submit" /> </form> </body>
</html>
  • views.py
from django.shortcuts import render

import os
# Create your views here. def upload(request): if request.method == "POST":
user = request.POST.get("user")
# img = request.POST.get("img") # 所有提交的文件名 img = request.FILES.get('img') # 所有提交的文件 img_name = img.name # 获取文件名
img_abs_name = os.path.join("static", img_name)
with open(img_abs_name, "wb") as f:
for chunk in img.chunks():
f.write(chunk) return render(request, 'upload.html')

上传完之后可以通过链接 “http://127.0.0.1:8000/static/文件名” 打开图片

使用js原生XMLHttpRequest对象进行ajax上传文件

  • upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <input type="text" id="user" name="user" />
<input type="file" id="img" name="img" />
<input type="button" value="上传图片" onclick="uploadFile1();"/> <script> // 使用原生的 XMLHttpRequest 上传图片
function uploadFile1() {
var form = new FormData();
form.append("user", document.getElementById("user").value); // 获取文件对象
var fileObj = document.getElementById("img").files[0];
form.append("img", fileObj); var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4){
// 已经接受到全部响应数据,执行以下操作
var data = xhr.responseText;
console.log(data);
}
}; xhr.open("POST", "/upload/", true);
xhr.send(form);
}
</script> </body>
</html>
  • views.py
from django.shortcuts import render
from django.shortcuts import HttpResponse import os
# Create your views here. def upload(request): if request.method == "POST":
user = request.POST.get("user")
# img = request.POST.get("img") # 所有提交的文件名 img = request.FILES.get('img') # 所有提交的文件 img_name = img.name
img_abs_name = os.path.join("static", img_name)
with open(img_abs_name, "wb") as f:
for chunk in img.chunks():
f.write(chunk) return HttpResponse("ok") return render(request, 'upload.html')

使用jQuery 的ajax上传文件

该方法需要借助js原生的FormData()将数据封装到该对象中,并且不支持低版本的浏览器,例如ie5、ie6

  • upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <input type="text" id="user" name="user" />
<input type="file" id="img" name="img" />
<input type="button" value="上传图片" onclick="jQueryAjax();"/> <script src="/static/jquery/jquery-1.12.4.js"></script>
<script> function jQueryAjax() { // 获取文件对象
var fileObj = $("#img")[0].files[0]; // 创建FormData对象
var form = new FormData(); // 将数据封装到对象中
form.append("img", fileObj);
form.append("user", "aa"); $.ajax({
type: "POST",
url: "/upload/",
data: form,
processData: false,
contentType: false, # 不设置请求头
sucess: function (arg) {
console.log(arg);
}
})
}
</script> </body>
</html>
  • views.py
from django.shortcuts import render
from django.shortcuts import HttpResponse import os
import json
# Create your views here. def upload(request): if request.method == "POST":
user = request.POST.get("user")
# img = request.POST.get("img") # 所有提交的文件名 img = request.FILES.get('img') # 所有提交的文件 img_name = img.name
img_abs_name = os.path.join("static", img_name)
print(img_abs_name)
with open(img_abs_name, "wb") as f:
for chunk in img.chunks():
f.write(chunk) return HttpResponse("ok") return render(request, 'upload.html')

使用jQuery 的ajax + iframe 解决浏览器兼容性的问题

  • upload1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style> #container img{
width: 100px;
height: 100px; }
</style>
</head>
<body> <iframe id="my_iframe" name="my_iframe" style="display:none" src="" ></iframe> <form id="fo" method="POST" action="/upload1/" enctype="multipart/form-data">
<input type="text" id="user" name="user" />
<input type="file" id="img" name="img" onchange="uploadFile();" />
<input type="submit"> </form> <div id="container"> </div> <script src="/static/jquery/jquery-1.12.4.js"></script>
<script> function uploadFile() {
$("#container").find("img").remove();
document.getElementById("my_iframe").onload = callback;
document.getElementById("fo").target = "my_iframe";
document.getElementById("fo").submit();
} function callback() { // 想获取iframe中的标签必须使用.contents来获取
var text = $("#my_iframe").contents().find('body').text();
var json_data = JSON.parse(text); if (json_data.status){
// 上传成功
// 生成img标签,预览刚才上传成功的图片 var tag = document.createElement("img");
tag.src = "/" + json_data.data;
tag.className = "img";
$("#container").append(tag);
}else{
alert(json_data.error);
}
} </script>
</body>
</html>
  • views.py
from django.shortcuts import render
from django.shortcuts import HttpResponse import os
import json
# Create your views here. def upload1(request):
if request.method == "POST":
ret = {
"status": False,
"data": None,
"error": None,
} try:
img = request.FILES.get("img")
img_name = img.name
img_abs_name = os.path.join("static", img_name)
print(img_abs_name)
with open(img_abs_name, "wb") as f:
for chunk in img.chunks():
f.write(chunk)
ret["status"] = True
ret["data"] = img_abs_name except Exception as e:
ret["error"] = str(e) return HttpResponse(json.dumps(ret)) return render(request, "upload1.html")

Django之上传文件的更多相关文章

  1. django之上传文件和图片

    文件上传:文件上传功能是网站开发中必定会使用到的技术,在django项目中也是如此,下面会详细讲述django中上传文件的前端和后端的具体处理步骤: 前端HTML代码实现: 1.在前端中,我们需要填入 ...

  2. (转)django上传文件

    本文转自:http://www.cnblogs.com/linjiqin/p/3731751.html 另:  本文对原文做了适当修改 更为详细的介绍可以参考官方文档. emplate html(模板 ...

  3. django上传文件

    template html(模板文件): <form enctype="multipart/form-data" method="POST" action ...

  4. 实现简单的django上传文件

    本文用django实现上传文件并保存到指定路径下,没有使用forms和models,步骤如下: 1.在模板中使用form表单,因为这个表单使用于上传文件的,所以method属性必须设置为post,而且 ...

  5. 8. Django系列之上传文件与下载-djang为服务端,requests为客户端

    preface 运维平台新上线一个探测功能,需要上传文件到服务器上和下载文件从服务器上,那么我们就看看requests作为客户端,django作为服务器端怎么去处理? 对于静态文件我们不建议通过dja ...

  6. FTP文件操作之上传文件

    上传文件是一个比较常用的功能,前段时间就做了一个上传图片的模块.开始采用的是共享文件夹的方式,后来发现这种方法不太好.于是果断将其毙掉,后来选择采用FTP的方式进行上传.个人感觉FTP的方式还是比较好 ...

  7. Django上传文件和上传图片(不刷新页面)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Django上传文件的那些参数

    # ################## 默认文件上传配置 ######################## from django.core.files.uploadhandler import M ...

  9. 20-1 django上传文件和项目里上传头像如何查看

    一 普通上传方式 1 views def upload(request): if request.method == "POST": # print(request.POST) # ...

随机推荐

  1. Kinect for Windows V2和V1对照开发___彩色数据获取并用OpenCV2.4.10显示

    V1彩色分辨率:640x480 V2彩色分辨率:1920x1080 1,打开彩色图像帧的方式 对于V1: 使用NuiImageStreamOpen方法打开 hr = m_PNuiSensor-> ...

  2. 各种快递查询--Api接口

    授权成功我的密钥 爱查快递API使用说明文档 API地址: 以前:http://api.ickd.cn/?com=[]&nu=[]&id=[]&type=[]&enco ...

  3. [React] Extracting Private React Components

    we leverage private components to break our render function into more manageable pieces without leak ...

  4. iOS 画音频波形曲线 根据音频数据版

    效果图 DrawView.h #import <UIKit/UIKit.h> @interface DrawView : UIView @property shortshort *draw ...

  5. 在VM中安装Android4.4连接小米手环 之 在VM中安装Android4.4

    今天刚买了个小米手环,系统须要4.4及以上,但自己手机系统版本号不匹配.故打算在VM中安装Android4.4连接小米手环. 这一节先介绍在VM中安装Android4.4(怎么安装VM就不介绍了) 1 ...

  6. Log4Qt使用(三)在DailyRollingFileAppender类中增加属性mMaxBackupIndex

    在Log4Qt中存在一个比较大的问题,当使用 DailyRollingFileAppender对日志进行输出时,会无限输出文件,也就是说,当系统运行很久时,日志文件有可能很大,大到无法想象.因此,很多 ...

  7. eclipse打包 jar文件,中文乱码解决方案

    直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以通过以下方法解决: 修改Eclipse中文本文件的默认编码:windows->Pref ...

  8. (转)Newtonsoft.Json序列化和反序列

    这里下载:http://www.newtonsoft.com/products/json/安装:   1.解压下载文件,得到Newtonsoft.Json.dll   2.在项目中添加引用.. 序列化 ...

  9. Tarjan求极大强连通分量模板

    #include<iostream> #include<cstring> #include<cstdio> #include<stack> #inclu ...

  10. Go语言之defer

    defer语句被用于预定对一个函数的调用.我们把这类被defer语句调用的函数称为延迟函数.注意,defer语句只能出现在函数或方法的内部. 一条defer语句总是以关键字defer开始.在defer ...