起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3323|回复: 9

[结贴] 如何替换attachmentsimple对象?

[复制链接]

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
发表于 2017-4-28 13:04:03 | 显示全部楼层 |阅读模式
本帖最后由 ufo1982ufo 于 2017-4-28 13:05 编辑

微信截图_20170428125414.png
按照教程在attachmentsimple中获取到上传文件的base64编码:
if (window.FileReader) {
                        var reader = new FileReader();
                        reader.readAsDataURL(file);
                        // 监听文件读取结束后事件
                        reader.onloadend = function(e) {                                            
                            var base64String = e.target.result; // e.target.result就是最后的路径地址
                            console.log(base64String);
                        };
                    }


由于安卓微信中attachmentsimple无法压缩图片,基于canvas对图像进行了压缩绘制,得到的也是base64编码:
                                                            ctx.drawImage(Img, 0, 0, Img.width, Img.height, 0, 0, canvas.width, canvas.height);
                                                            canvas.toDataURL('image/jpeg', quality);
                                                            var dataUrl = canvas.toDataURL('image/jpeg', quality);
                                                            var img3 = document.getElementById('image3');
                                                            img3.src = dataUrl;



attachmentsimple始终设置了不自动上传,我想用我绘制的经过压缩的图像替代event.file的文件,如何处理?





发表于 2017-4-28 14:05:19 | 显示全部楼层
你F12 看下源码吧!
attachmentSimple 组件源码中
<div data-bind="foreachattachmentItems"

这个下面的第二个节点 div 下面动态生成的背景图片!
  1. <div class="x-attachment-item x-item-other" data-bind="click:$model.previewOrRemoveItem.bind($model),style:{backgroundImage:($model.previewPicture.bind($model,$object))()}" xid="div10">
复制代码


你可以修改源码。将
$model.previewPicture.bind($model,$object))()  换成自己的一个KO 对象!然后把背景图片给他赋值即可!


就能显示你的图片了!
3(H{3ACHNB(ZYTNMN0BWA[N.png
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-4-28 14:37:39 | 显示全部楼层
liangyongfei 发表于 2017-4-28 14:05
你F12 看下源码吧!
attachmentSimple 组件源码中

无标题.jpg
先定义KO对象,再在这里换成KO对象,然后用canvas绘缩略图,再将 canvas.toDataURL('image/jpeg', quality)赋值给KO,再submit。
用户重新删除重传会不会有影响?是这个思路嘛?
回复 支持 反对

使用道具 举报

发表于 2017-4-28 15:02:32 | 显示全部楼层
ufo1982ufo 发表于 2017-4-28 14:37
先定义KO对象,再在这里换成KO对象,然后用canvas绘缩略图,再将 canvas.toDataURL('image/jpeg', quali ...

也不行!这个绑定是需要执行上传以后才能生成的!data组件中的值也是上传才生成的!
如果想显示预览!只能自己在这个div下 动态生成dom节点实现了!!

执行上传的时候!再把你的dom节点删除!使用系统自动生成的缩略图实现了!

如果想上传后也自己生成缩略图!那就修改这里!!变成你自定义的KO对象!(因为是多张图片!建议定义一个普通的data组件实现!)
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-4-28 15:26:23 来自手机 | 显示全部楼层
liangyongfei 发表于 2017-4-28 15:02
也不行!这个绑定是需要执行上传以后才能生成的!data组件中的值也是上传才生成的!
如果想显示预览 ...

主要不是修改预览的值,而是想对那个event.file的文件直接改成我用canvas绘制的!如果只修改预览值的话上传的文件还是大文件!
回复 支持 反对

使用道具 举报

发表于 2017-4-28 15:30:49 | 显示全部楼层
ufo1982ufo 发表于 2017-4-28 15:26
主要不是修改预览的值,而是想对那个event.file的文件直接改成我用canvas绘制的!如果只修改预览值的话上 ...

那个event.file 就是真正的大文件!!
我们的预览也是使用的这个文件!你看他是通过调用后端的请求获取图片的!(就是一个输出流)

你不能修改event.file  需要做的是自己 动态创建dom节点实现它吧
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-4-28 16:20:37 | 显示全部楼层
liangyongfei 发表于 2017-4-28 15:30
那个event.file 就是真正的大文件!!
我们的预览也是使用的这个文件!你看他是通过调用后端的请求获取图 ...

我的那个img3也可以改成动态创建,问题是我创建后希望那个attachmentsimple(或者说uploader)就使用我创建的对象,然后后面还是交给attachmentsimple的逻辑来处理!否则还是用的大文件就没有意义了!
回复 支持 反对

使用道具 举报

发表于 2017-4-28 16:56:17 | 显示全部楼层
1.具体如何替换,还需要看源码!
你看下 /UI2/system/components/justep/uploader/uploader-html5.js  中的submit 方法
里面调用的self.doUpload(data.file);  就是文件对象!
你可以修改它的代码!将file对象传递进去!

或者试试
this.comp('attachmentSimple组件Xid').uploader.inputElement.files
换成你的文件对象!

这是一个数组!你把里面的对象删除! 把自己的文件对象加进去就行了!


qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-5-2 14:40:47 | 显示全部楼层
liangyongfei 发表于 2017-4-28 16:56
1.具体如何替换,还需要看源码!
你看下 /UI2/system/components/justep/uploader/uploader-html5.js  中的 ...

搞了好几回都没有搞定,于是专门针对微信用:justep.Browser.isWeChat判断修改。1、attachmentsimple在微信里点击预览的功能禁用,找到“\model\UI2\system\components\justep\attachment\attachmentSimple.js”修改previewOrRemoveItem 如下:
  1.         previewOrRemoveItem : function($object){
  2.                 var realFileName = $object.realFileName.get();
  3.                 var storeFileName = $object.storeFileName.get();
  4.                 var ownerID = this.getOwnerID($object);
  5.                 if(this.$state.get() == 'upload'){
  6.                         if(!justep.Browser.isWeChat){
  7.                                this.downloadFile(realFileName,storeFileName,ownerID);
  8.                         }
  9.              }else if(this.$state.get() == 'remove'){
  10.                     this.deleteFile(storeFileName,ownerID);
  11.             }
  12.         },
复制代码
2、然后把缩略图的?图标修改成已经上传的图片预览,还是这个文件,找到:getPictureUrl修改后运行dist:
  1.         getPictureUrl : function($object){
  2.                 var realFileName = encodeURIComponent($object.realFileName.get());
  3.                 var storeFileName = $object.storeFileName.get();
  4.                 var ownerID = this.getOwnerID($object);
  5.                 var operateType = "browse";
  6.                 var imgFileType = ".jpg,.jpeg,.jpe,.png,.gif,.tiff,.tif,.svg,.svgz,.svg";
  7.                 var url = "";
  8.                 if(imgFileType.indexOf((String(/\.[^\.]+$/.exec(realFileName)).toLowerCase())) >= 0){
  9.                         url = this.getFileUrl(realFileName,storeFileName,ownerID,operateType);
复制代码

3、由于上次图片真实name不对,带有%之类的符号(http://xxx.com/baas/mfxxl/attach ... 05-02&realFileName=image%253A263173&operateType=browse&from=singlemessage)。于是自己显示缩略图,新建一个image,增加“id=image3”并使用canvas绘制大的缩略图并显示:
  1.                                     if(justep.Browser.isWeChat){
  2.                                                 var Img = new Image();
  3.                                                 var canvas = document.createElement('canvas');
  4.                                                 var ctx = canvas.getContext('2d');
  5.                                                 var maxWidth = 800;
  6.                                                 var maxHeight = 800;
  7.                                                 var quality = 0.85;
  8.                                                 Img.onload = function() {
  9.                                                     if (Img.width>maxWidth || Img.height>maxHeight) {
  10.                                                         var bili = Math.max(Img.width/maxWidth, Img.height/maxHeight);
  11.                                                         canvas.width = Img.width/bili;
  12.                                                         canvas.height = Img.height/bili;
  13.                                                     }else{
  14.                                                         canvas.width = Img.width;
  15.                                                         canvas.height = Img.height;
  16.                                                     }
  17.                                                     ctx.drawImage(Img, 0, 0, Img.width, Img.height, 0, 0, canvas.width, canvas.height);
  18.                                                     canvas.toDataURL('image/jpeg', quality);
  19.                                                     var dataUrl = canvas.toDataURL('image/jpeg', quality);
  20.                                                     console.log(dataUrl);
  21.                                                     var img3 = document.getElementById('image3');
  22.                                                     img3.src = dataUrl;
  23.                                                     uploader.submit();
  24.                                             };
  25.                                                 Img.src = _URL.createObjectURL(file);
  26.                                     }
复制代码

目前只有这样,等新版本发布后再改回来啦!
谢谢梁老师的指导,可以结贴!




回复 支持 反对

使用道具 举报

11

主题

36

帖子

106

积分

初级会员

Rank: 2

积分
106
QQ
发表于 2018-8-6 14:14:47 | 显示全部楼层
没看懂怎么改。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-3 18:08 , Processed in 0.071808 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表