<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload.html" method="POST" enctype="multipart/form-data">
<input type="text" name="file_name">
<div style="position: relative">
<a>点击上传文件</a>
<input type="file" name="is_file" style="opacity: 0;position: absolute;top: 0;left: 0;">
</div>
<input type=submit name="OK">
</form>
</body>
</html>
from django.shortcuts import render,HttpResponse

# Create your views here.

def upload(request):
if request.method == "GET":
return render(request,"upload.html")
else:
#print(request.POST) #<QueryDict: {'file_name': ['12321321'], 'OK': ['提交']}>
#print(request.FILES) #<MultiValueDict: {'is_file': [<TemporaryUploadedFile: 说明书.pdf (application/pdf)>]}> filename = request.POST.get("file_name")
isfile = request.FILES.get("is_file") #isfile是对象(内容有文件大小,文件名称,文件内容等) print(isfile.name,isfile.size) #isfile.name文件名 #isfile.size文件大小,可以拿这值做限制 f = open('file/'+isfile.name,'wb')
for data in isfile.chunks():
f.write(data)
f.close()
return HttpResponse("ok")

2 通过ajax上传文件三种方式:

 view代码三种方式都用这个代码

def file(request):
#print(request.FILES)
#print(request.POST)
isfile = request.FILES.get("isfile") # isfile是对象(内容有文件大小,文件名称,文件内容等) print(isfile) # isfile.name文件名 #isfile.size文件大小,可以拿这值做限制 f = open('static/' + isfile.name, 'wb')
for data in isfile.chunks():
f.write(data)
f.close()
return HttpResponse("OK")

  -jQuery 

      html代码 

  <input type="file" id="pufile">
  <a class="btn" onclick="AjaxSubmitFile()">上传</a> jQuery代码
function AjaxSubmitFile() {
var data = document.getElementById("pufile").files[0];//加上索引files[0]就是文件的内容,固定写法
var f = new FormData();
f.append('k1','k1'), //k1,k1是添加的一个数据到这个FromData里面去
f.append('k3','k3'),
f.append('isfile',data);
$.ajax({
url:"/file/",
type:"POST",
data:f,
success:function (arg) {
console.log(arg)
},
processData: false,//通过FormData处理数据 jQuery上传文件必须要加这个 tell jQuery not to process the data
contentType:false,//通过FormData处理数据 jQuery上传文件必须要加这个 tell jQuery not to set contentType
//以上表示jQuery data数据内容不需要做处理了,把FormData内容发过去给服务器就可以了
})
}
 

-原生 

function AjaxSubmitFile1() {
var data = document.getElementById("pufile").files[0];//加上索引files[0]就是文件的内容,固定写法
var f = new FormData();
f.append('k1','k1');
f.append('k3','k3');
f.append('isfile',data);
var xhr = new XMLHttpRequest() ; <!-- #创建一个对象 -->
xhr.open('POST','/file/'); <!--#与那个url创建连接-->
xhr.onreadystatechange =function (){
if(xhr.readyState == 4){
// 4-完成,已经接收到全部响应数据;
console.log(xhr.responseText);
};
}; <!-- #onreadystatechange状态改变的时候执行function -->
xhr.send(f); <!-- #开始发送-->
}

默认情况下,jQuery 和 原生 以上两种是不支持上传文件的,但是可以利用FormData对象来封装用户提交的数据(FormData可以封装数据,也可以封装文件)

 -ifrname+ Form

html代码

<iframe style="display: none" name="fileifrname"></iframe>
<form id="putifrname" action="/file/" method="post" target="fileifrname" enctype="multipart/form-data">
<input type="text" name="k1">
<input type="text" name="k2">
<input type="file" name="isfile">
<a onclick="putifrname()">上传</a>
</form>
function putifrname() {
document.getElementById("putifrname").submit();//点击putifrname标签,就开始提交
}

上传图片显示在页面,并且页面不自动刷新

Veiw代码:

def file(request):
print(request.FILES)
print(request.POST)
isfile = request.FILES.get("isfile") # isfile是对象(内容有文件大小,文件名称,文件内容等) print(isfile) # isfile.name文件名 #isfile.size文件大小,可以拿这值做限制 f = open('static/' + isfile.name, 'wb')
for data in isfile.chunks():
f.write(data)
f.close() import os,json
name = json.dumps(os.path.join("static",isfile.name))
print(name)
return HttpResponse(name)

Html代码:

<h1>Ifrname+Form上传</h1>
<iframe style="display: none" name="fileifrname" id="fileifrname"></iframe>
<form id="putifrname" action="/file/" method="post" target="fileifrname" enctype="multipart/form-data">
<input type="text">
<input type="file" name="isfile" onchange="putifrname()"> <!--//内容改变的时候;自动执行putifrname自动提交-->
</form> <div id="png"></div> <script>
function putifrname() {
document.getElementById('fileifrname').onload = test;
document.getElementById("putifrname").submit(); //提交的时候给上面ifrname标签加上 onload=test 让执行完后执行test函数
} function test() {
var data = this.contentWindow.document.body.innerHTML;
var obj = JSON.parse(data);
console.log(obj);
var tag = document.createElement('img');
tag.src = "http://127.0.0.1:8000/" + obj;
$("#png").empty().append(tag)
} </script>

Django上传文件和上传图片(不刷新页面)的更多相关文章

  1. (转)django上传文件

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

  2. django上传文件

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

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

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

  4. el-upload 上传文件和上传图片的基本用法

    el-upload 上传excel <template> <el-form :model="form"> <el-form-item label=&q ...

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

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

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

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

  7. Django上传文件的两种方式

    基于form表单上传文件 HTML <h3>基于form表单的上传文件</h3> <form action="" method="post& ...

  8. 【python】django上传文件

    参考:https://blog.csdn.net/zahuopuboss/article/details/54891917 参考:https://blog.csdn.net/zzg_550413470 ...

  9. Python - Django - 上传文件

    upload.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

随机推荐

  1. 前端小白第一次使用redux存取数据练习

    在学习了redux基本教程后,课程参考如下网址:https://www.redux.org.cn/docs/introduction/CoreConcepts.html,开始着手练习 1.首先编写一个 ...

  2. 16. Antimalware (反病毒 3个)

    Malwarebytes反恶意软件是为Windows的恶意软件扫描程序. 作者声称使用各种技术来查找其他恶意软件扫描仪检测不到的恶意软件. 有一个有限选项的免费试用版和支持能够运行扫描计划的完整版本, ...

  3. 使用VMWare虚拟机打开MFC报错:不支持16位系统

    可能这个问题的比较小众,但还是提供一下自己的思路. 笔者使用的是VMWare Fusion11的版本,采用windows7sp1的虚拟机. 在打开Mac系统共享过来的VC++的MFC文件运行时报错:不 ...

  4. 关于定时器setTimeout()方法的实践--巧解bug

    _使用开发环境:UAP:_ _框架:JQuery.MX:_ 最近的开发的页面中,有一处需要在提交的 datagrid里启用行编辑,就会发生奇怪的bug,编辑过程中如图所示不移开焦点直接点保存,那么已输 ...

  5. 做web开发的时候老是把颜色码忘记了,特地来写个博客,以后方便找。

    对照表 英文代码 形像颜色 HEX格式 RGB格式 LightPink 浅粉色 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 # ...

  6. Vue2.5

    1.1 创建第一个Vue实例

  7. Wavelet Ridgelet Curvelet Contourlet Ripplet

    Ripplet: A New Transform for Image Processing Jun Xu, Lei Yang and Dapeng Wu Ripplet: A New Transfor ...

  8. 关于mysql自增主键

    对于mysql表(其他数据库没测试过) 如果定义了自增主键,并且手动设置了主键的值,那么当再次自增创建数据的时候,回在设置的主键值的基础上进行自增. 如(id是主键): 起始插入(3,1),而后手动插 ...

  9. IOS屏幕旋转思路和实践

    这段时间同事在做一个直播项目,项目有个需求:一个界面需要手动设置屏幕的方向,设置好之后方向不能变化.完成这个需求花了特别大的精力,归因是网上关于屏幕旋转的知识比较凌乱,解决问题花费不少时间,最后决定把 ...

  10. Delphi编译选项

    编译选项的设置,称为“开关指令”,其中大部分值为布尔类型 一.代码生成(Code generation)1.Optimization  优化代码,默认true2.Stack frames  生成过程/ ...