django 文件上传(阿里云oss)下载(支持大文件下载)
1.文件上传
Models 设计
class Upload_File(models.Model):
image = models.FileField(upload_to='file/%Y/%m',default = 'image/default.png',max_length=100)
add_time = models.DateTimeField(auto_now_add=True,verbose_name='添加时间')
forms 设计
from django import forms
from .models import Upload_File class UploadFileForm(forms.ModelForm):
class Meta:
model = Upload_File
fields = ['image']
settings设计
STATIC_URL = '/static/' MEDIA_URL = '/media/' #文件上传目录
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #文件上传地址
View设计(上传思路:先保存到本地media目录然后读取目录,保存到云服务器,方法比较笨,但是能实现后期优化)
#阿里云OSS的基本配置
access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', 'LLLLLLLLLL')
access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', 'BBBBBB')
bucket_name = os.getenv('OSS_TEST_BUCKET', 'CCCCC')
endpoint = os.getenv('OSS_TEST_ENDPOINT', 'https://oss-cn-beijing.aliyuncs.com') # 确认上面的参数都填写正确了
for param in (access_key_id, access_key_secret, bucket_name, endpoint):
assert '<' not in param, '请设置参数:' + param # 创建Bucket对象,所有Object相关的接口都可以通过Bucket对象来进行 def GetForm(request):
"""
请求表单
""" file = Upload_File() if request.method == 'POST':
Up_File = UploadFileForm(request.POST, request.FILES)
if Up_File.is_valid():
headFile = Up_File.cleaned_data['image']
file.image = headFile
print(MEDIA_ROOT)
file.save() print(file.image.name)
print(file.image.path) bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name) bucket.put_object_from_file('{}/{}'.format('media', file.image.name),'{}/{}'.format('media', file.image.name)) # # 下载到本地文件
# bucket.get_object_to_file('media/file/2018/01/1曾经有一份真挚的爱情大话西游经典片段.mp4', 'media/file/2018/01/1曾经有一份真挚的爱情大话西游经典片段.mp4') return HttpResponse('{"status":"success"}', content_type='application/json')
URL设计
from django.views.static import serve #用于处理上传文件
from django_upload.settings import MEDIA_ROOT # 上传文件
url(r'^form/$', GetForm, name='go_form'), # 配置上传文件的访问函数
url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}),
HTML
<form action="{% url 'go_form' %}" method="post" enctype="multipart/form-data" class="smart-green">
<span class="fl upload-inp-box" style="margin-left:70px;">
<input type="file" name="image" id="avatarUp" class="js-img-up"/>
</span>
<label>
<span> </span> <br><br><br> <input type="submit" class="button" value="提交"/> <br><br> </label>
{% csrf_token %}
</form>
2.文件下载:
View
def file_down(request):
"""
文件下载
"""
def readFile(fn, buf_size=262144):
f = open(fn, "rb")
while True:
c = f.read(buf_size)
if c:
yield c
else:
break
f.close() path = os.path.abspath(MEDIA_ROOT)
print(path)
#文件相对路径
path = 'media/file/2018/01/遥领医疗数据AI项目商业计划书-20171211.pptx'
print(path) response = StreamingHttpResponse(readFile(path)) response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename=%s' % (urlquote('遥领医疗数据AI项目商业计划书-20171211.pptx')) #下载后的名字 return response
url设计
#文件下载
url(r'^file_down/$', file_down, name='file_down'),
HTML
<button>
<a href="/file_down/">下载</a>
</button>
django 文件上传(阿里云oss)下载(支持大文件下载)的更多相关文章
- 微信小程序中图片上传阿里云Oss
本人今年6月份毕业,最近刚在上海一家小公司实习,做微信小程序开发.最近工作遇到一个小问题. 微信小程序图片上传阿里云服务器Oss也折腾了蛮久才解决的,所以特意去记录一下. 第一步:配置阿里云地址: 我 ...
- 文件上传-阿里云OSS-存储文件
JS上传文件到阿里云OSS OSS支持流式写入和读出.特别适合视频等大文件的边写边读业务场景. 注意在OSS的控制台:跨域管理中设置允许的方法 <script> var client = ...
- 百度editor调用【图片上传阿里云】
百度editor调用简单,但是图片和文件上传阿里云就有点难度了.下面我详细说一下. 百度富文本编辑器下载地址:http://ueditor.baidu.com/website/download.htm ...
- 阿里云OSS下载pdf文件,并在pdf文件上添加水印
代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 公司要求从阿里云OSS下载pdf文件并且需要添加水印. 因此这里总结一下. 首先添加了一个F ...
- Django文件上传下载与富文本编辑框
django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...
- base64格式的图片上传阿里云
base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...
- python_way day21 Django文件上传Form方式提交,原生Ajax提交字符处啊,Django文件上传之原生Ajax方式、jQuery Ajax方式、iframe方式,Django验证码,抽屉示例,
python_way day21 1.Django文件上传至Form方式 2.原生Ajax文件上传提交表单 使用原生Ajax好处:不依赖jquery,在发送一个很小的文件或者字符串的时候就可以用原生A ...
- JavaWeb多文件上传及zip打包下载
项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分. 首先明确一点: 无法通过页面的无刷新ajax请求,直接发下载.上 ...
- django文件上传、图片验证码、抽屉数据库设计
1.Django文件上传之Form方式 settings.py, ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'django.contrib.admin', 'd ...
- 在CabloyJS中将Webpack生成的文件自动上传到阿里云OSS
背景 阿里云OSS提供了一个Webpack插件,可在Webpack打包结束后将webpack生成的文件自动上传到阿里云OSS中 下面看看在CabloyJS中如何使用该插件 新建项目,并配置MySQL连 ...
随机推荐
- http://www.cnblogs.com/nick-huang/p/4848843.html
http://www.cnblogs.com/nick-huang/p/4848843.html
- Cocos2d-x 处理双击事件的两种方法
在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现. 下面介绍两种方式实现双击事件的处理. (一 ...
- [每日一题] OCP1z0-047 :2013-08-25 正则表达式REGEXP_LIKE-----‘harddisks’.................108
正确答案:AB A. 'hard+.s'能够匹配harddisks,以hard开头,其中表达式的d+号代表任意个d(至少出现一次d),“.”代表除了换行符之外的任意字符, 可以代表d和s之间的&quo ...
- Net作业调度(一) -Quartz.Net入门 Quartz表达式生成器 [转]
背景 很多时候,项目需要在不同个时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了. 这时候需要一个更为强大,方便管理,集部署的作业调度了. 介绍 Quartz一个开 ...
- STL之hashtable源代码剖析
// Filename: stl_hashtable.h /////////////////////////////////////////////////////////////////////// ...
- ASP.NET操作Oracle知识记录(采用ODP.NET)
最近因为要把以前做的一个项目数据库从MSSQL2005转移到Oracle上,所以开始接触Oracle,通过本篇随笔简单记录一些ASP.NET结合Oralce的操作: 因为微软未来不再支持 System ...
- JavaScript数组方法说明
JavaScript的数组方法有: http://www.w3school.com.cn/jsref/jsref_obj_array.asp 其中:concat.join和slice方法都不会修改原数 ...
- MS SQL得到指定日期的当月月末
MS SQL得到指定日期的当月月末 declare @ddate date ,,)) select @ddate --2016-01-31 declare @ddatetime datetime ,, ...
- 理解Load Average做好压力测试(转)
转载自:http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果 ...
- String的split()方法探索和大揭秘
事实上没打算写这么一篇博文的,可是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人吃惊的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这 ...