实现文件上传的多种方法

 

实现文件上传的多种方法

 

一、Form表单上传

  

复制代码
def update(request):
    if request.method=="GET":
        return render(request,'update.html')
    else:
        img=request.FILES.get('img')
        if img:
            print(img.name)
            print(img.size)
            f = open(img.name, "wb")
            for line in img.chunks():
                f.write(line)
            f.close()
            return HttpResponse('上传成功')
        else:
            return HttpResponse('选择上传文件')
复制代码

 

 

二、AJAX上传

HTML - XMLHttpRequest

1
2
3
4
5
6
7
8
9
10
获取数据:
var fileObj = document.getElementById("img").files[0];<br>
封装数据:
var form = new FormData();
 form.append("k1", "v1");
 form.append("fff", fileObj);
注意:FormData是个用来封装数据的。<br>
创建XMLHttpRequest:
var xhr = new XMLHttpRequest();<br><br>发送数据: xhr.open("post", '/index', true);
 xhr.send(form);

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <input type="file" id="img" />
    <input type="button" onclick="UploadFile();" />
    <script>
        function UploadFile(){
            var fileObj = document.getElementById("img").files[0];
 
            var form = new FormData();
            form.append("k1", "v1");
            form.append("fff", fileObj);
 
            var xhr = new XMLHttpRequest();
            xhr.open("post", '/index', true);
            xhr.send(form);
        }
    </script>
</body>
</html>
 
HTML - XMLHttpRequest

  

 

HTML - jQuery

1
2
1.这里使用ajax进行数据提交<br><br>2.需要加上这两条<br> processData: false,  // tell jQuery not to process the data
 contentType: false,  // tell jQuery not to set contentType

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <input type="file" id="img" />
    <input type="button" onclick="UploadFile();" />
    <script>
        function UploadFile(){
            var fileObj = $("#img")[0].files[0];
            var form = new FormData();
            form.append("k1", "v1");
            form.append("fff", fileObj);
 
            $.ajax({
                type:'POST',
                url: '/index',
                data: form,
                processData: false,  // tell jQuery not to process the data
                contentType: false,  // tell jQuery not to set contentType
                success: function(arg){
                    console.log(arg);
                }
            })
        }
    </script>
</body>
</html>
 
HTML - jQuery

  

  

 HTML - iframe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <form id="my_form" name="form" action="/index" method="POST"  enctype="multipart/form-data" >
        <div id="main">
            <input name="fff" id="my_file"  type="file" />
            <input type="button" name="action" value="Upload" onclick="redirect()"/>
            <iframe id='my_iframe' name='my_iframe' src=""  class="hide"></iframe>
        </div>
    </form>
 
    <script>
        function redirect(){
            document.getElementById('my_iframe').onload = Testt;
            document.getElementById('my_form').target = 'my_iframe';
            document.getElementById('my_form').submit();
 
        }
         
        function Testt(ths){
            var t = $("#my_iframe").contents().find("body").text();
            console.log(t);
        }
    </script>
</body>
</html>

  

 

 演示图片上传功能(iframe+From)

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% load staticfiles %}
</head>
<body>


<!--FormData文件上传-->
<script src="{% static '/js/jquery/jquery-3.3.1.js' %}"></script>
    <iframe style="" id="iframe" name="ifra"></iframe>
    <form id="fm" action="/upload_img.html/" method="post" enctype="multipart/form-data" target="ifra">
        <input type="file" name="File" onchange="uploadFile();">


    </form>
    <h3>预览</h3>
        <div id="preview">

        </div>



    <script>
       function uploadFile(){

        document.getElementById('iframe').onload=reloadIframe;
        document.getElementById('fm').submit();

       }

       function reloadIframe(){
        var content=this.contentWindow.document.body.innerHTML;
        var obj=JSON.parse(content);
        console.log(obj);
        var tag=document.createElement('img');

        tag.src='http://127.0.0.1:8080/'+obj.data;
        console.log(obj.data);
        console.log(tag.src);
        $('#preview').empty().append(tag);
       }
    </script>


</body>
</html>
View Code
复制代码

 

复制代码
from django.shortcuts import render, HttpResponse, redirect
import json
import os
import uuid

def upload_img(request):


    nid = str(uuid.uuid4())
    ret={'status':True,'data':None,'message':None}
    obj=request.FILES.get('File')

    file_path=os.path.join('static',nid+obj.name)
    print(file_path)
    print(1)
    f=open(file_path,'wb')
    for line in obj.chunks():
        f.write(line)
    f.close()
    ret['data']=file_path
    return HttpResponse(json.dumps(ret))
View Code
复制代码

 

 

 

 

posted @   -零  阅读(463)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示