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

QQ登录

只需一步,快速开始

查看: 4744|回复: 11

[结贴] 怎么把一张图片存入APP中创建好的文件系统目录里?

  [复制链接]

29

主题

65

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
QQ
发表于 2016-6-14 18:00:28 | 显示全部楼层 |阅读模式
file的例子有text的操作,可以实现创建一个text文件并记录文字。 if (!dataObj) {
            dataObj = new Blob(['12345678'], { type: 'text/plain' });
        }

    fileWriter.write(dataObj);

但如果我想把一张图片存入创建好的文件系统目录下,该怎么操作?有没有例子可以参考?


试过copy(currDir, srcEntry, destDir) 的方法,想法是把一张图片从手机内存copy到文件系统中,但是没成功····
请教下各位有没有其他方法可以实现这个功能

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2016-6-15 15:25:17 | 显示全部楼层
file的操作可以参考/UI2/system/components/justep/cordova/demo/www/file/index.w中的看看是否有相关的API
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

29

主题

65

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
QQ
 楼主| 发表于 2016-6-16 11:33:48 | 显示全部楼层
jishuang 发表于 2016-6-15 15:25
file的操作可以参考/UI2/system/components/justep/cordova/demo/www/file/index.w中的看看是否有相关的API ...

已经实现了,谢谢
回复 支持 反对

使用道具 举报

发表于 2016-6-17 09:19:37 | 显示全部楼层

请问如何实现的?说来供大家参考下吧!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

65

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
QQ
 楼主| 发表于 2016-6-20 15:50:43 | 显示全部楼层
liangyongfei 发表于 2016-6-17 09:19
请问如何实现的?说来供大家参考下吧!

我是这样做的1、先把要存的图片转成base64码,或者用getPicture来获取手机中的图片也是可以的,destinationType 选DATA_URL就直接有base64码。                navigator.camera.getPicture(onSuccess, onFail, {                        quality : 100,
                        destinationType : navigator.camera.DestinationType.DATA_URL,// DATA_URL,FILE_URI
                        saveToPhotoAlbum : true,// 保存在系统文件///storage/emulated/0/Pictures中
                        sourceType : source
                });


2、然后去网上撸了一段base64码转blob的代码,稍微修改了下
// base64转bolb
function convertBase64UrlToBlob(url) {
                        // var bytes=window.atob(base64code.split(',')[1]);
                        // //去掉url的头,并转换为byte
                        var bytes = window.atob(url);
                        // 处理异常,将ascii码小于0的转换为大于0
                        var ab = new ArrayBuffer(bytes.length);
                        var ia = new Uint8Array(ab);
                        for (var i = 0; i < bytes.length; i++) {
                                ia = bytes.charCodeAt(i);
                        }
                        return new Blob([ ab ], {
                                type : 'image/jpeg'
                        });
                }
3、转成功以后就写到APP的文件系统中。

var data = convertBase64UrlToBlob(MapURL);
fileWriter.write(data);


回复 支持 反对

使用道具 举报

48

主题

147

帖子

1575

积分

金牌会员

Rank: 6Rank: 6

积分
1575
QQ
发表于 2016-8-26 00:34:40 | 显示全部楼层
五千万得主 发表于 2016-6-20 15:50
我是这样做的1、先把要存的图片转成base64码,或者用getPicture来获取手机中的图片也是可以的,destinati ...

您好,请问 fileWriter.write(data);
fileWriter 对象是怎样定义的呢?存储到手机上的路径在哪儿啊,谢谢
回复 支持 反对

使用道具 举报

29

主题

65

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
QQ
 楼主| 发表于 2016-9-5 17:06:10 | 显示全部楼层
zhangbingshan 发表于 2016-8-26 00:34
您好,请问 fileWriter.write(data);
fileWriter 对象是怎样定义的呢?存储到手机上的路径在哪儿啊,谢谢 ...

看下代码,感受一下就明白了。。。fileurl就是你定义的文件的完整路径,比如这样的:/user/student/yaoming.jpg
我这里源数据是图片格式,所以要用后面的convertBase64UrlToBlob来转成能被存储的格式

saveDataTofilesystem : function(fileurl,Base64code,dtd) {
                        var self = this;
                        window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
                        window.requestFileSystem(window.PERSISTENT, 0, function(fs) {       
                                fs.root.getFile(fileurl, {
                                        create : true
                                }, function(fileEntry) {
                                        fileEntry.createWriter(function(fileWriter) {
                                                var data = self.convertBase64UrlToBlob(Base64code);
                                                fileWriter.write(data);
                                                dtd.resolve();
                                                //alert('save success'+fileurl);
                                        }, function(err) {
                                                alert("错误码 :" + err.code);
                                        });
                                }, function(err) {
                                        alert("错误码 :" + err.code);
                                });

                        },  self.errorHandler);
                },
               
                convertBase64UrlToBlob : function(Base64code) {
                        // var bytes=window.atob(base64code.split(',')[1]);
                        // //去掉url的头,并转换为byte
                        var bytes = window.atob(Base64code);
                        // 处理异常,将ascii码小于0的转换为大于0
                        var ab = new ArrayBuffer(bytes.length);
                        var ia = new Uint8Array(ab);
                        for (var i = 0; i < bytes.length; i++) {
                                ia = bytes.charCodeAt(i);
                        }
                        return new Blob([ ab ], {
                                type : 'image/jpeg'
                        });
                },
回复 支持 反对

使用道具 举报

48

主题

147

帖子

1575

积分

金牌会员

Rank: 6Rank: 6

积分
1575
QQ
发表于 2016-9-12 09:08:15 | 显示全部楼层
五千万得主 发表于 2016-9-5 17:06
看下代码,感受一下就明白了。。。fileurl就是你定义的文件的完整路径,比如这样的:/user/student/yaomi ...

谢谢
回复 支持 反对

使用道具 举报

53

主题

928

帖子

1730

积分

金牌会员

Rank: 6Rank: 6

积分
1730
发表于 2016-9-12 13:24:43 | 显示全部楼层
感谢!!!感谢  
虽然  还没试过 效果怎么样   但是这个问题已经困扰我好几天了,我就是想用wex5做图片和文件上传,一直弄不好。这几天要是再弄不好,都准备用其他软件直接做一个网页页面了。
承接wex5开发web项目、微信页面等;
低费用进行零散功能开发(java、JS、微信各种接口、阿里云接口等)
QQ:459349489
回复 支持 反对

使用道具 举报

1

主题

9

帖子

123

积分

初级会员

Rank: 2

积分
123
QQ
发表于 2017-3-10 12:01:39 | 显示全部楼层
五千万得主 发表于 2016-9-5 17:06
看下代码,感受一下就明白了。。。fileurl就是你定义的文件的完整路径,比如这样的:/user/student/yaomi ...

您好,按您的方法去实现,提示errorcode : 9
请问如何解决呢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 03:31 , Processed in 0.109764 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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