码迷,mamicode.com
首页 > 其他好文 > 详细

用SAE自制10G网盘

时间:2015-05-01 19:53:08      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

在本地可以用Django上传文件到Mysql数据库,但在SAE上就行不通了,SAE平台用的是分布式文件系统,官方建议开发者将所有的需要持久化的文件操作都通过Storage实现。Storage是SAE为开发者提供的分布式文件存储服务,用来存放用户的持久化存储的文件 

官方说明:用户需要先在Storage的管理界面中创建容器,创建完毕后,用户可以通过以下两种方式操作其中数据:

  • 通过 Cyberduck 或者 swift 等Storage客户端
  • 通过SAE提供的API接口

SAE的storage文档提供了API接口的代码:

http://sae.sina.com.cn/doc/python/storage.html

首先在SAE服务管理开启Storage服务

技术分享 

下面部署代码,编写代码思路,代码分两部分,上传和下载,上传就是将文件upload到Storage中。关于下载,我看遍了Storage接口API就是没有关于下载的API,当时很郁闷,怎么把上传到Storage中的文件再下载下来,之后我进入SAE的Storage的目录中

技术分享

这是上传到Storage中的文件,然后点文件的名称它会提供一个地址比如:http://pylabsite-pylab.stor.sinaapp.com/Snap.jpg,其实这就是文件的下载地址,然后下载就变得超简单,只用在前端设置一个该地址的超链接就行了,点击之后,就会自动下载。

Django端代码:

models

from django.db import models
 
class Server(models.Model):
        file = models.FileField(upload_to = ‘./‘)
 
        def __unicode__(self):
                return self.username

views

#coding:utf-8
from django.shortcuts import render
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from server.models import Server
from django.core.servers.basehttp import FileWrapper
from django.http import StreamingHttpResponse
from django.template import RequestContext
import os
 
 
class UploadForm(forms.Form):
        file = forms.FileField()
 
@csrf_exempt
def upload(request):
        if request.method == "POST":
            form = UploadForm(request.POST,request.FILES)
            if form.is_valid():
                f = form.cleaned_data[‘file‘]
                import sae.const  
                access_key = sae.const.ACCESS_KEY  
                secret_key = sae.const.SECRET_KEY  
                appname = sae.const.APP_NAME  
                domain_name = "pylab" 
                import sae.storage  
                s = sae.storage.Client()  
                ob = sae.storage.Object(f.read())
                url = s.put(domain_name, f.name, ob)  
                return HttpResponse(‘upload OK‘) 
                
        else:
                form = UploadForm()
        from sae.storage import Bucket
        bucket = Bucket(‘pylab‘)
        i = bucket.list()
        return render_to_response(‘upload.html‘,{‘form‘:form,‘i‘:i},context_instance=RequestContext(request))

前端测试代码:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title></title>
</head>
<body>
<h1>Upload</h1>
<form method="post" enctype="multipart/form-data" >
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="ok"/>
</form>
    {% for k in i %}
            Content:{{k.name}}
         
            <a type="button"  href = ‘http://pylabsite-pylab.stor.sinaapp.com/{{k.name}}‘>Download</a>
            <br/>
    {% endfor %}
</body>
</html>

然后效果就是:

技术分享

现在简单的网盘就做好了,可以实现文件的上传,上传后的文件点击Download可以下载,Storage免费空间有10G,作为一个网盘来说已经很可观了,但是该Storage单次上传文件不能大于10M。该自制网盘还需要后续优化,比如上传大文件,添加上传进度条,还有CSS方面的美化等等。

用SAE自制10G网盘

标签:

原文地址:http://www.cnblogs.com/pylab/p/4470986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!