首先要先設定models.py


import os
from apps.common.templatetags.utiltags import thumb
from apps.common.lib import calsize

def _FILE_UPLOAD_TO(instance, filename):
    return os.path.join('apps', 'your_app_name', 'media', 'your_app_name', 'photo_file', str(upload_date), str(instance.id)+'.'+instance.ext)

class PhotoFile(M.Model):
    #督導缺失相片上傳區
    name = M.CharField(verbose_name='檔案名', max_length=256, null=True, default='')
    ext = M.CharField(verbose_name='副檔名', max_length=10, null=True)
    upload_date = M.DateField(verbose_name='上傳日期')
    file = M.ImageField(upload_to=_FILE_UPLOAD_TO, null=True)
    memo = M.CharField(verbose_name='備註說明', null=True, max_length=2048)

    def rUrl(self):
        return self.file.name.split('apps/your_app_name/')[-1]

    def rThumbUrl(self):
        thumbsrc = thumb(self.file.name, "width=1024,height=768")
        if thumbsrc == 'media/images/error.png':
            return self.file.name.split('apps/your_app_name/')[-1]
        else:
            return thumbsrc.split('apps/your_app_name/')[-1]

    def rExt(self):
        return self.file.name.split('.')[-1].lower()

    def calSize(self):
        if self.file:
            return calsize(self.file.size)
        else:
            return calsize(0)





再來是Html網頁部分:


<input id="newfile_name" name="newfile_name" type="text"/>
<input id="newfile_file" name="newfile_file" type="file"/>

<input id="upload_File" type="submit" value="確定上傳" />





再來是JavaScript網頁部分(請自己先去下載AjaxFileUpload.js模組):


$("#upload_File").click(upload_File);

function upload_File() {
    var $obj = $(this);
    var name = $('#newfile_name').attr('value');
    var file = $('#newfile_file').attr('value');
    var ext = $('#newfile_file').attr('value').split('.');
    ext = ext[ext.length-1].toLowerCase();
    
    if (!file){
        alert('請選擇檔案!!!')
        return false;
    }

    if (!confirm('確定上傳 '+file+' ?  按下確定後開始上傳,請勿關閉此頁面!!')){
        return false;
    }

    $.ajaxFileUpload({
        url: '/your_app_name/upload_file/?name=' + name,
        async: true,
        fileElementId: 'newfile_file',
        dataType: 'json',
        success: function (json, status) {
            if (json['status'] == false){
                alert(json['message']);
            } else {
                alert('上傳成功');
            }
        },
        error: function (json, status, e) {
        }
    });
}





再來是Django部分:

第一部分是urls.py


urlpatterns = patterns('apps.project.views',
    (r'^upload_file/$', 'uploadFile'),
)





第二部分是views.py

import datetime
def TODAY(): return datetime.datetime.today()

def uploadPhotoFile(R):
    name = R.GET.get('name')
    file = R.FILES.get('newfile_file', None)
    try:
        extension = file.name.split('.')[-1].lower()
    except:
        extension = 'zip'
    
    row = PhotoFile(
                        name = name,
                        ext = extension,
                        upload_date = TODAY(),
                        )
    row.save()
    
    if file:
        getattr(row, 'file').save('%s.%s'%(row.id, extension), file)
        row.save()
    
    return HttpResponse(json.dumps({'status': True}))

arrow
arrow
    全站熱搜

    嘎抓強 發表在 痞客邦 留言(0) 人氣()