微信公衆號開發Django-圖片處理

原文連接
微信公衆號開發,圖片處理部分javascript

上篇文章已經獲取了wx的接口權限
原本想直接使用wx的圖像接口,可是後來發現處理js動做有點小麻煩
還有些莫名的錯誤,就選擇了好用的 weui.js
挺好用~

(爲了少走彎路,建議直接用weui.js)html

首先咱們設置後端代碼接收前端post,在上篇文章已經提到前端

# Image字段
class Image(models.Model):
    file = models.ImageField('圖片', upload_to=image_filename, blank=True)
    name = models.CharField('文件名', blank=True, null=True, max_length=256)
    uploaded_by = models.ForeignKey(FansProfile, verbose_name='上傳者', on_delete=models.CASCADE)

    created_time = models.DateTimeField('建立時間', auto_now_add=True)
    last_modify_time = models.DateTimeField('最後修改時間', auto_now=True)

class activity(View):
    
    def post(self,request,*args, **kwargs):
        request_type = request.POST.get('type')
        if not request_type:
            pass # 處理ticket獲取
        elif request_type == 'image/jpeg':
            files = request.FILES.getlist('fileVal')[0]
            filename = request.POST.dict()['name']
            uploader_id = request.COOKIES.get('fanid','')
            check_id = FansProfile.objects.filter(id=uploader_id).first()
            if not check_id:
                return HttpResponseRedirect(web_get_code+'snsapi_base#wechat_redirect')
            post_image = Image(file = files) # Image數據庫模型
            post_image.uploaded_by = check_id
            post_image.name = filename.split('.')[:-1][0]
            post_image.save()
            return HttpResponse(json.dumps({'statue':True}),content_type="application/json")

而後來到前端,下面是簡單的實現
就是weui.js文檔和演示html的堆砌
詳情點擊weui.js-docs
weui.js預覽java

{% load static %}
<script>
    $(document).ready(function () {
        var uploadCountDom = document.getElementById("uploadCount")
        var url = location.href.split('#')[0];
        var uploadCount = 0,
            uploadList = [];
        $('#uploaderInput').on("click", function (e) {
                weui.uploader('#uploader', {
                    url: url,
                    auto: false,
                    type: 'file',
                    fileVal: 'fileVal',
                    compress: {
                        width: 1600,
                        height: 1600,
                        quality: .8
                    },
                    onBeforeQueued: function (files) {
                        // `this` 是輪詢到的文件, `files` 是全部文件

                        if (["image/jpg", "image/jpeg", "image/png", "image/gif"].indexOf(this.type) < 0) {
                            weui.alert('請上傳圖片');
                            return false; // 阻止文件添加
                        }
                        if (this.size > 10 * 1024 * 1024) {
                            weui.alert('請上傳不超過10M的圖片');
                            return false;
                        }
                        if (files.length > 5) { // 防止一會兒選擇過多文件
                            weui.alert('最多隻能上傳5張圖片,請從新選擇');
                            return false;
                        }
                        if (uploadCount + 1 > 5) {
                            weui.alert('最多隻能上傳5張圖片');
                            return false;
                        }

                        ++uploadCount;
                        uploadCountDom.innerHTML = uploadCount
                        // return true; // 阻止默認行爲,不插入預覽圖的框架
                    },
                    onQueued: function () {
                        uploadList.push(this);
                        console.log(this);

                        // console.log(this.status); // 文件的狀態:'ready', 'progress', 'success', 'fail'
                        // console.log(this.base64); // 若是是base64上傳,file.base64能夠得到文件的base64

                        // this.upload(); // 若是是手動上傳,這裏能夠經過調用upload來實現;也能夠用它來實現重傳。
                        // this.stop(); // 中斷上傳

                        // return true; // 阻止默認行爲,不顯示預覽圖的圖像
                    },
                    onBeforeSend: function (data, headers) {
                        console.log(this, data, headers);
                        // $.extend(data, { test: 1 }); // 能夠擴展此對象來控制上傳參數
                        $.extend(headers, { 'X-CSRFToken': '{{ csrf_token }}' }); // 能夠擴展此對象來控制上傳頭部

                        // return false; // 阻止文件上傳
                    },
                    onProgress: function (procent) {
                        console.log(this, procent);
                        // return true; // 阻止默認行爲,不使用默認的進度顯示
                    },
                    onSuccess: function (ret) {
                        console.log(this, ret);
                        // return true; // 阻止默認行爲,不使用默認的成功態
                    },
                    onError: function (err) {
                        console.log(this, err);
                        // return true; // 阻止默認行爲,不使用默認的失敗態
                    }
                });
        })
        // 縮略圖預覽
        document.querySelector('#uploaderFiles').addEventListener('click', function (e) {
            var target = e.target;

            while (!target.classList.contains('weui-uploader__file') && target) {
                target = target.parentNode;
            }
            if (!target) return;

            var url = target.getAttribute('style') || '';
            var id = target.getAttribute('data-id');

            if (url) {
                url = url.match(/url\((.*?)\)/)[1].replace(/"/g, '');
            }
            var gallery = weui.gallery(url, {
                className: 'custom-name',
                onDelete: function onDelete() {
                    weui.confirm('肯定刪除該圖片?', function () {
                        --uploadCount;
                        uploadCountDom.innerHTML = uploadCount;

                        for (var i = 0, len = uploadList.length; i < len; ++i) {
                            var file = uploadList[i];
                            if (file.id == id) {
                                file.stop();
                                break;
                            }
                        }
                        target.remove();
                        gallery.hide();
                    });
                }
            });
        });
        document.querySelector('#images-del').addEventListener('click', function () {
            options.onDelete.call(this, url);
        });
        document.querySelector('#confirmBtn').addEventListener('click', function () {
            weui.confirm('肯定提交嗎?', function () {
                uploadList.forEach(function (file) {
                    file.upload();
                });
                console.log('yes');
            }, function () {
                console.log('no');
            }, {
                    title: '提交確認'
                });
        });
    });
</script>

<div class="weui-gallery">
    <span class="weui-gallery__img"></span>
    <div class="weui-gallery__opr">
        <a href="javascript:" class="weui-gallery__del">
            <i class="weui-icon-delete weui-icon_gallery-delete" id="images-del"></i>
        </a>
    </div>
</div>
<div class="weui-cells weui-cells_form" id="uploader">
    <div class="weui-cell">
        <div class="weui-cell__bd">
            <div class="weui-uploader">
                <div class="weui-uploader__hd">
                    <p class="weui-uploader__title">圖片上傳</p>
                    <div class="weui-uploader__info">
                        <span id="uploadCount">0</span>/5</div>
                </div>
                <div class="weui-uploader__bd">
                    <ul class="weui-uploader__files" id="uploaderFiles"></ul>
                    <div class="weui-uploader__input-box">
                        <input id="uploaderInput" class="weui-uploader__input" type="file" accept="image/*" capture="camera" multiple="" />
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="weui-btn-area">
    <a class="weui-btn weui-btn_primary" href="javascript:" id="confirmBtn">肯定</a>
</div>

相關文章
相關標籤/搜索