8. Django系列之上传文件与下载-djang为服务端,requests为客户端
preface
运维平台新上线一个探测功能,需要上传文件到服务器上和下载文件从服务器上,那么我们就看看requests作为客户端,django作为服务器端怎么去处理? 对于静态文件我们不建议通过django下载,而是建议通过django返回一个重定向URL(下载文件的URL)给client,这个url是nginx提供下载,众所周知,nginx是非常牛逼的静态web-server。
以下代码都是简单的代码,可以正常使用,只是实现最基本的要上传文件到服务器上和下载文件从服务器上,不涉及到公司的业务逻辑。文件可以通过md5校验,反正我测试都是一致的MD5值。
Author:温柔易淡
代码如下
使用的python2.7的版本,其他的如果没有做特殊说明是python2.7的版本,那么我的其他博客都是python3.5的版本
- 先看客户端的代码:
#!/usr/bin/env python
# encode:utf-8
import requests
def post_file(): #文件上传(post方法)
post_url='http://127.0.0.1/file/post/'
data=[]
fr=open(r'/tmp/Python-2.7.13.tgz','rb')
file = {'file':('Python-2.7.13.tgz',open(r'/tmp/Python-2.7.13.tgz','rb'),'application/x-tar')}
m = {'act': 'avatar', 'save': '1'}
rt =requests.post(url=post_url,files=file,data=m)
print(rt.status_code,rt.text)
def get_file(): #文件下载(get方法)
get_url = 'http://127.0.0.1/file/get/'
get_params = {'filename':'Python-2.7.13.tgz'}
rt = requests.get(url=get_url,params=get_params)
with open('/tmp/vmware-root/Python-2.7.13.tgz','wb') as f:
# it's not img or others and so on ,if it is ,we need to use BytesIO to save
# for example:
# from io import BytesIO
# i = Image.open(BytesIO(r.content)) # r is a return object
for chunk in rt.iter_content():
f.write(chunk)
print('ok')
#post_file()
get_file()
- 再看服务器端的代码:
from django.shortcuts import render,HttpResponse
from django.http import StreamingHttpResponse
# Create your views here.
def file_get(request): #文件下载(get方法)
print(request.GET)
file_name = request.GET.get('filename')
file_path = "/root/%s"%(file_name)
def file_read(file_name,chunk_size=1024):
# itertor return the file's chunk, if the file size is very large,it must be useful, so server won't OOM
with open(file_name,'rb') as f:
while True:
chunks = f.read(chunk_size)
if chunks:
print(chunks)
yield chunks
else:
break
response_data = StreamingHttpResponse(file_read(file_path))
response_data['Content-Type'] = 'application/octet-stream' # set the type as stream then PC will save it in their disk
response_data['Content-Disposition'] = 'attachment;filename="%s"'%(file_name) # set the file name
return response_data
def file_post(request):
print(request.POST,request.FILES)
file_obj = request.FILES.get('file')
print(type(file_obj))
if file_obj:
save_file_path='/root/%s'%(file_obj.name)
with open(save_file_path,'wb') as f:
for chunks in file_obj.chunks():
f.write(chunks)
return HttpResponse('ok')
其他的url代码就不赘述了。
8. Django系列之上传文件与下载-djang为服务端,requests为客户端的更多相关文章
- linux命令之上传文件和下载文件
lrzsz-0.12.20.tar.gz是一款linux下命令行界面上支持上传和下载的第三方工具,能够起到很方便的作用. # rz 选择文件进行上传 # sz 文件名 sz后面跟文件名可以进行文件从l ...
- C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求
1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- ie8 ajaxSubmit 上传文件提示下载
转载 解决ie下ajaxsubmit上传文件提示下载文件问题 主要是应为放回类型为json,返回text/html
- Jmeter和LR上传文件和下载
Jmeter和LR上传文件和下载 背景: 在某个申请业务中,需要上传附件文件,然后才能提交该申请 遇到的问题: 1, 在使用Jmeter或者LR进行录制时,无法录制到上传文件的请求,只能通过Fidd ...
- Loadrunner上传文件与下载文件脚本
Loadrunner上传文件与下载文件脚本 一. 上传脚本 Action() { int uploadImgStatus = 0; //获取上传产品图ID web_reg_save_param_ex( ...
- Delphi阿里云对象存储OSS【支持上传文件、下载文件、删除文件、创建目录、删除目录、Bucket操作等】
作者QQ:(648437169) 点击下载➨Delphi阿里云对象存储OSS 阿里云api文档 [Delphi阿里云对象存储OSS]支持 获取Bucket列表.设置Bucket ...
- 11 hbase源码系列(十一)Put、Delete在服务端是如何处理
hbase源码系列(十一)Put.Delete在服务端是如何处理? 在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...
- 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收
利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
随机推荐
- python. pandas(series,dataframe,index) method test
python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...
- JAVA实用工具--javamail
在实现javamail之前首先要搭建邮件服务器 James 在进行WEB程序开发的时候需要使用Tomcat服务器,但是Tomcat服务器并不支持邮件的处理操作,所以要想进行邮件的发送,还需要配置一个单 ...
- java基础篇---网络编程(UDP程序设计)
UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...
- jQuery Validate验证方法及教程
//实名认证 验证 $(function(){ //中文姓名验证 jQuery.validator.addMethod("zh_verify", function(value, e ...
- 【计算机网络基础】TCP/IP、HTTP、Socket的概念
TCP/IP协议是一个协议簇.里面包括很多协议的.UDP也是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.(资料来源: http://www.cnb ...
- keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
引自:http://blog.csdn.net/sinat_26917383/article/details/72885715 人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节 ...
- C++函数调用时的参数传递-3中传递方式
参数传递即实参向形参传递信息,使形参获得对应的存储空间及初值,C++中函数传递主要有3种方式: 1.按值传递. 以按值传递方式进行参数传递的过程为:首先计算出实参的值,然后给它所对应的形参变量分配存储 ...
- sql分页存储过程比较
一,先创建一百万条数据 drop table #tmp create table #tmp ( id ,) primary key, name ) ) declare @i int begin ins ...
- 安全运维之:网络实时流量监测工具iftop
网络管理是基础运维中一个很重要的工作,在看似平静的网络运行中,其实暗流汹涌,要保证业务系统稳定运行,网络运维者必须要了解网络的流量状态.各个网段的使用情形,带宽的利用率.网络是否存在瓶颈等,同时,当网 ...
- 在R中运行Shell命令脚本(Call shell commands from R)
aaa.R Args <- commandArgs()cat("Args[1]=",Args[1],"\n")cat("Args[2]=&quo ...