preface

运维平台新上线一个探测功能,需要上传文件到服务器上和下载文件从服务器上,那么我们就看看requests作为客户端,django作为服务器端怎么去处理? 对于静态文件我们不建议通过django下载,而是建议通过django返回一个重定向URL(下载文件的URL)给client,这个url是nginx提供下载,众所周知,nginx是非常牛逼的静态web-server。

以下代码都是简单的代码,可以正常使用,只是实现最基本的要上传文件到服务器上和下载文件从服务器上,不涉及到公司的业务逻辑。文件可以通过md5校验,反正我测试都是一致的MD5值。

Author:温柔易淡

代码如下

使用的python2.7的版本,其他的如果没有做特殊说明是python2.7的版本,那么我的其他博客都是python3.5的版本

  1. 先看客户端的代码:
  1. #!/usr/bin/env python
  2. # encode:utf-8
  3. import requests
  4. def post_file(): #文件上传(post方法)
  5. post_url='http://127.0.0.1/file/post/'
  6. data=[]
  7. fr=open(r'/tmp/Python-2.7.13.tgz','rb')
  8. file = {'file':('Python-2.7.13.tgz',open(r'/tmp/Python-2.7.13.tgz','rb'),'application/x-tar')}
  9. m = {'act': 'avatar', 'save': '1'}
  10. rt =requests.post(url=post_url,files=file,data=m)
  11. print(rt.status_code,rt.text)
  12. def get_file(): #文件下载(get方法)
  13. get_url = 'http://127.0.0.1/file/get/'
  14. get_params = {'filename':'Python-2.7.13.tgz'}
  15. rt = requests.get(url=get_url,params=get_params)
  16. with open('/tmp/vmware-root/Python-2.7.13.tgz','wb') as f:
  17. # it's not img or others and so on ,if it is ,we need to use BytesIO to save
  18. # for example:
  19. # from io import BytesIO
  20. # i = Image.open(BytesIO(r.content)) # r is a return object
  21. for chunk in rt.iter_content():
  22. f.write(chunk)
  23. print('ok')
  24. #post_file()
  25. get_file()
  1. 再看服务器端的代码:
  1. from django.shortcuts import render,HttpResponse
  2. from django.http import StreamingHttpResponse
  3. # Create your views here.
  4. def file_get(request): #文件下载(get方法)
  5. print(request.GET)
  6. file_name = request.GET.get('filename')
  7. file_path = "/root/%s"%(file_name)
  8. def file_read(file_name,chunk_size=1024):
  9. # itertor return the file's chunk, if the file size is very large,it must be useful, so server won't OOM
  10. with open(file_name,'rb') as f:
  11. while True:
  12. chunks = f.read(chunk_size)
  13. if chunks:
  14. print(chunks)
  15. yield chunks
  16. else:
  17. break
  18. response_data = StreamingHttpResponse(file_read(file_path))
  19. response_data['Content-Type'] = 'application/octet-stream' # set the type as stream then PC will save it in their disk
  20. response_data['Content-Disposition'] = 'attachment;filename="%s"'%(file_name) # set the file name
  21. return response_data
  22. def file_post(request):
  23. print(request.POST,request.FILES)
  24. file_obj = request.FILES.get('file')
  25. print(type(file_obj))
  26. if file_obj:
  27. save_file_path='/root/%s'%(file_obj.name)
  28. with open(save_file_path,'wb') as f:
  29. for chunks in file_obj.chunks():
  30. f.write(chunks)
  31. return HttpResponse('ok')

其他的url代码就不赘述了。

8. Django系列之上传文件与下载-djang为服务端,requests为客户端的更多相关文章

  1. linux命令之上传文件和下载文件

    lrzsz-0.12.20.tar.gz是一款linux下命令行界面上支持上传和下载的第三方工具,能够起到很方便的作用. # rz 选择文件进行上传 # sz 文件名 sz后面跟文件名可以进行文件从l ...

  2. C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求

    1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...

  3. Java ftp 上传文件和下载文件

    今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...

  4. ie8 ajaxSubmit 上传文件提示下载

    转载 解决ie下ajaxsubmit上传文件提示下载文件问题 主要是应为放回类型为json,返回text/html

  5. Jmeter和LR上传文件和下载

    Jmeter和LR上传文件和下载 背景: 在某个申请业务中,需要上传附件文件,然后才能提交该申请 遇到的问题: 1,  在使用Jmeter或者LR进行录制时,无法录制到上传文件的请求,只能通过Fidd ...

  6. Loadrunner上传文件与下载文件脚本

    Loadrunner上传文件与下载文件脚本 一. 上传脚本 Action() { int uploadImgStatus = 0; //获取上传产品图ID web_reg_save_param_ex( ...

  7. Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】

    作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS             阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...

  8. 11 hbase源码系列(十一)Put、Delete在服务端是如何处理

    hbase源码系列(十一)Put.Delete在服务端是如何处理?    在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...

  9. 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收

    利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介   WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

随机推荐

  1. hystrix服务降级和服务熔断的区别

    故事的背景是这样的:由于小强在工作中碰到一些问题,于是想请教一下业界大牛小壮.于是发生了下面的两个场景: 小强在拿起常用手机拨号时发现该手机没有能够拨通,所以就拿出了备用手机拨通了某A的电话,这个过程 ...

  2. C#2.0 Socket套接字编程之实例初探 200

    首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以 ...

  3. vs2010中TargetName与链接器输出名不一致

    当出现解决方案生成正确,但是无法执行.exe文件,即系统无法找到指定文件时,提示有:MSB8012: TargetName(,,,) 与 Linker 的 OutputFile 属性(,,,)不匹配. ...

  4. Mongodb网络好文章

    http://blog.csdn.net/pi9nc/article/details/17722419 mongodb集群配置. http://blog.fens.me/mongodb-replica ...

  5. Android——FilenameFilter总结(转)

    一.FilenameFilter介绍   java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件: 一般地: (1)String[] fs = f.l ...

  6. c# dump 程序崩溃 windbg

    待研究 http://issf.blog.163.com/blog/static/194129082201002534895/ http://www.cppblog.com/woaidongmao/a ...

  7. 30个开源电子商务系统(PHP)

    osCommerce osCommerce是一款著名的PHP开源电子商务解决方案,提出“开箱即用”的强大功能,使网上商店安装非常方便快捷,并可以作为GNU通用公共授权的开源项目免费发布.osComme ...

  8. WaitForSingleObject函数的使用

    等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止.  WaitForSingleObject 函数 DWORD WaitForSingleObject( HANDLE hOb ...

  9. RIP路由协议及工作原理

    RIP路由协议及工作原理 RIP(Routing information Protocol,路由信息协议)是应用较早.使用较普遍的内部网关协议(Interior Gateway Protocol,IG ...

  10. why "Everything" is so fast?

    Everything并不扫描整个磁盘,只是读取磁盘上的USN日志,所以速度飞快.但因此缺点也明显:1.只支持NTFS格式的分区,因为USN日志是NTFS专有的.在FAT.FAT32格式分区上无法使用E ...