django文件上传下载

views:

def mgmt_files(request): #列出树形目录,上传文件页面
    if request.method == ‘POST‘:
        path_root = "D:\\py\\ITFiles" #上传文件的主目录
        myFile =request.FILES.get("file", None)    # 获取上传的文件,如果没有文件,则默认为None
        if not myFile:
            dstatus = "请选择需要上传的文件!"
        else:
            path_ostype = os.path.join(path_root,request.POST.get("ostype"))
            path_dst_file = os.path.join(path_ostype,myFile.name)
            # print path_dst_file
            if os.path.isfile(path_dst_file):
                dstatus = "%s 已存在!"%(myFile.name)
            else:
                destination = open(path_dst_file,‘wb+‘)    # 打开特定的文件进行二进制的写操作
                for chunk in myFile.chunks():      # 分块写入文件
                    destination.write(chunk)
                destination.close()
                dstatus = "%s 上传成功!"%(myFile.name)
        return HttpResponse(str(dstatus))

    return render(request,‘sinfors/mgmt_files.html‘)

def mgmt_file_download(request,*args,**kwargs): #提供文件下载页面
    #定义文件分块下载函数
    def file_iterator(file_name, chunk_size=512):
        with open(file_name,‘rb‘) as f: #如果不加‘rb’以二进制方式打开,文件流中遇到特殊字符会终止下载,下载下来的文件不完整
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    path_root = "D:\\py\\ITFiles"
    if kwargs[‘fpath‘] is not None and kwargs[‘fname‘] is not None:
        file_fpath = os.path.join(path_root,kwargs[‘fpath‘]) #kwargs[‘fapth‘]是文件的上一级目录名称
        file_dstpath = os.path.join(file_fpath,kwargs[‘fname‘]) #kwargs[‘fname‘]是文件名称

        response = StreamingHttpResponse(file_iterator(file_dstpath))
        response[‘Content-Type‘] = ‘application/octet-stream‘
        response[‘Content-Disposition‘] = ‘attachment;filename="{0}"‘.format(kwargs[‘fname‘]) #此处kwargs[‘fname‘]是要下载的文件的文件名称
        return response

  StreamingHttpResponse对象用于将文件流发送给浏览器,与HttpResponse对象非常相似,对于文件下载功能,使用StreamingHttpResponse对象更合理。通过文件流传输到浏览器,但文件流通常会以乱码形式显示到浏览器中,而非下载到硬盘上,因此,还要在做点优化,让文件流写入硬盘,给StreamingHttpResponse对象的Content-Type和Content-Disposition字段赋下面的值即可,如:

response[‘Content-Type‘] = ‘application/octet-stream‘
response[‘Content-Disposition‘] = ‘attachment;filename="filename.txt"‘

html页面:

 <form id="uploadForm" enctype="multipart/form-data"> //文件上传的form
            {% csrf_token %}
            <input id="file" type="file" name="file" > //上传文件
            <input type="radio" name="ostype" value="Windows" />Windows
            <input type="radio" name="ostype" value="Linux" />Linux
            <input type="radio" name="ostype" value="Network" />Network
            <input type="radio" name="ostype" value="DB" />DB
            <button id="upload" type="button" style="margin:20px">上传</button> </form>

js页面:

  $("#upload").click(function(){
    // alert(new FormData($(‘#uploadForm‘)[0]));
    var ostype = $(‘input:radio:checked‘).val()
    if (ostype == undefined){
      alert(‘请选择上传的文件类型‘);
    }
     //获取单选按钮的值
    $.ajax({
            type: ‘POST‘,
            // data:$(‘#uploadForm‘).serialize(),
            data:new FormData($(‘#uploadForm‘)[0]),
            processData : false,
            contentType : false, //必须false才会自动加上正确的Content-Type
            // cache: false,
            success:function(response,stutas,xhr){
              // parent.location.reload();
              //window.location.reload();
              // alert(stutas);
              alert(response);
            },
            // error:function(xhr,errorText,errorStatus){
            //   alert(xhr.status+‘ error: ‘+xhr.statusText);
            // }
            timeout:6000
        });

  });

时间: 2024-12-17 17:49:43

django文件上传下载的相关文章

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

使用Paramiko实现SSH登陆,文件上传下载

1,SSh登陆命令行实现: #!/usr/bin/env python # encoding: utf-8 import paramiko private_key_path = '/Users/aolens/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.Aut

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl

文件上传下载

1.文件上传 文件上传下载本质是通过Socket的字节流来传输数据的.所以,对于文件上传,我们可以从HttpRequest对象获取输入流,进而获取上传文件的内容.但是采用ServletAPI并不能获取获取对应文件的字节流,而是获取整个Socket的字节流,里面包括提交的参数.上传文件内容以及其他附加信息. Servlet API上传文件,代码如下 protected void doPost(HttpServletRequest request, HttpServletResponse respo

Hadoop之HDFS原理及文件上传下载源码分析(下)

上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文件上传.下载源解析. 文件上传 先上文件上传的方法调用过程时序图: 其主要执行过程: FileSystem初始化,Client拿到NameNodeRpcServer代理对象,建立与NameNode的RPC通信(楼主上篇已经介绍过了) 调用FileSystem的create()方法,由于实现类为Dis

django文件上传

django文件上传 -------------------上传图片-------------------1.model中定义属性类型为models.ImageField类型pic=models.ImageField(upload_to='images/upload/') 2.如果属性类型为ImageField需要安装包Pilowpip install Pillow==3.4.1 3.图片存储路径1.在项目根目录下创建static文件夹 2.图片上传后,会被保存到"/static/images/

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项目地址:http://www.51aspx.com/code/MSDCArtMengFileUpload 咨询qq:286275658 演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 服务器端运行效果图: 服务器端配置文件: <?xml version="1.

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V

.Net Core 图片文件上传下载

当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. 一.开发环境 毋庸置疑,宇宙第一IDE VisualStudio 2017 二.项目结构 FilesController 文件上传下载控制器 PictureController 图片上传下载控制器 Return_Helper_DG 返回值帮助类 三.关键代码 1.首先我们来看Startup.cs