找回密码
 立即注册

QQ登录

只需一步,快速开始

sz_xd
金牌服务用户   /  发表于:2021-5-23 23:50  /   查看:3336  /  回复:10
5金币
本帖最后由 Joe.xu 于 2021-5-24 17:51 编辑

我使用情景为: 在活字格中,我用手机上传图片,之后我在数据库中存储一张图片,这张图片用base64流的方式,直接存储在数据库中。这种方式就类似于之前有人对接的高拍仪,高拍仪直接拍照,显示在页面中,然后直接在前端页面将这个图片的base64流存入数据库对应的图片字段里。

烦请老师帮忙修改附件中的代码,谢谢!(我附件中的代码发现将图片转换为base64流的效率慢,最好能帮忙用活字格接口中转换方式应可以好些?


参考  网上用 Javascript  将图片转换为base64的代码为以下,但发现要指定读取这图片的路径的 : var img = "imgurl"; //imgurl 就是你的图片路径  

以下在活字格设计器代码在执行时发现是没问题,但用活字格发布编译发布后将会出错,因路径发生变化了, 故请教如何修改Javascript 达成可以用活字格发布时也可读取路径 , 即如何修改 可以在代码中直接读取活字格服务端的图片路径?
var img = `http://${window.location.host}/Upload/`+Forguncy.Page.getCell("jpg").getValue();

------以下为完整 Javascript  将图片转换为base64的代码
var img = `http://${window.location.host}/Upload/`+Forguncy.Page.getCell("jpg").getValue();
function getBase64Image(img) {  
     var canvas = document.createElement("canvas");  
     canvas.width = img.width;  
     canvas.height = img.height;  
     var ctx = canvas.getContext("2d");  
     ctx.drawImage(img, 0, 0, img.width, img.height);  
     var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();  
     var dataURL = canvas.toDataURL("image/"+ext);  
     return dataURL;  
}  
var image = new Image();  
image.src = img;  
image.onload = function(){  
  var base64 = getBase64Image(image);  
  console.log(base64);  
Forguncy.Page.getCell('touxiang').setValue(base64);
}



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

你的代码的问题在于设计器运行是,${window.location.host}可以获取到localhost:端口号,因为设计器预览不存在应用名,所以直接在host后拼接Upload即可。 但是发布之后的应用${window.location.host}只能获取到ip:端口号,没有对应的应用名,那么这时候就会出现你设置的文件路径找不到的原因 做如下修改即可

10 个回复

倒序浏览
最佳答案
最佳答案
Eric.Liang讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-5-23 23:50:41
来自 5#
本帖最后由 Eric.Liang 于 2021-5-24 13:52 编辑
sz_xd 发表于 2021-5-24 11:32
苏老师:非常感谢回复,但我不太懂这 Javascript  语句使用,我已上传了这工程附件,烦你帮忙在编译发布 ...

你的代码的问题在于设计器运行是,${window.location.host}可以获取到localhost:端口号,因为设计器预览不存在应用名,所以直接在host后拼接Upload即可。
但是发布之后的应用${window.location.host}只能获取到ip:端口号,没有对应的应用名,那么这时候就会出现你设置的文件路径找不到的原因
做如下修改即可


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-5-24 10:10:33
2#
您好,设计器和服务器默认存储上传图片位置是不一样的,
服务中如果没有填的话,默认存储在“C:\Users\Public\Documents\ForguncyServer\应用名\Upload”目录中,
您可以用这个路径是试一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
sz_xd
金牌服务用户   /  发表于:2021-5-24 11:32:08
3#
本帖最后由 sz_xd 于 2021-5-25 03:07 编辑
Joe.xu 发表于 2021-5-24 10:10
您好,设计器和服务器默认存储上传图片位置是不一样的,
服务中如果没有填的话,默认存储在“C:%users\Pub ...

徐老师:非常感谢回复,但我不太懂这 Javascript  语句使用,我已上传了这工程附件,烦你帮忙在编译发布后跟踪调试一下,谢谢!

现主要问题为以下: 发现它这是使用 http:// 打开方式读取 图片路径

//采用重新打开读取图片的路路径,
var img = `http://${window.location.host}/Upload/`+Forguncy.Page.getCell("jpg").getValue();


var image = new Image();  
image.src = img;
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-5-24 13:46:42
4#
本帖最后由 Joe.xu 于 2021-8-13 11:18 编辑
sz_xd 发表于 2021-5-24 11:32
苏老师:非常感谢回复,但我不太懂这 Javascript  语句使用,我已上传了这工程附件,烦你帮忙在编译发布 ...

大哥,
看了一下您的代码,在upload前面需要加上应用名

比如我发布了一个test的应用,前面就加上test就可以啦




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
sz_xd
金牌服务用户   /  发表于:2021-5-24 14:32:10
6#
Eric.Liang 发表于 2021-5-24 13:50
你的代码的问题在于设计器运行是,${window.location.host}可以获取到localhost:端口号,因为设计器预览 ...

梁总:感谢回复指教,我按你修改后在PC电脑端使用发布是没问题的,但用手机打开进行上传转换时就会闪退出来了,烦请你帮忙调试跟踪一下,谢谢!
回复 使用道具 举报
Eric.Liang讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-5-24 16:09:05
7#
sz_xd 发表于 2021-5-24 14:32
梁总:感谢回复指教,我按你修改后在PC电脑端使用发布是没问题的,但用手机打开进行上传转换时就会闪退出 ...

我移动的测试了下,是没有问题的,不过会很慢,因为手机上传的图片在执行逻辑的时候会因为图片的大小,网络等多个因素影响

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
sz_xd
金牌服务用户   /  发表于:2021-5-24 19:52:50
8#
本帖最后由 sz_xd 于 2021-5-25 03:06 编辑
Eric.Liang 发表于 2021-5-24 16:09
我移动的测试了下,是没有问题的,不过会很慢,因为手机上传的图片在执行逻辑的时候会因为图片的大小,网 ...

梁总:感谢帮忙测试及回复,谢谢!  如果你用移动手机进行测试也是很慢的(效率差),即是这网上抄录在用户端页面转换的方法行不通了!

我经再改用服务器端命令Web api进行转换 图片至base64代码,之后再返回页面了!这在PC电脑端是改善了4倍时间效率(原页面用JavaScript处理需要8秒左右,改用Web api调用处理只需要2秒左右就可以了),但在移动手机上回传图片的base64还是会假死,估计是图片转base64的文本字符太多了,手机安全软件将其禁止了!

为保证移动手机端的使用效果,我明天再试  直接 用 Web api 将 base64 保存 至服务器端数据库表中,或改用腾讯云保存;

回复 使用道具 举报
Tracy.Liu讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-5-25 11:07:52
9#
感谢大家的支持~
回复 使用道具 举报
sz_xd
金牌服务用户   /  发表于:2021-5-26 00:20:51
10#
sz_xd 发表于 2021-5-24 19:52
梁总:感谢帮忙测试及回复,谢谢!  如果你用移动手机进行测试也是很慢的(效率差),即是这网上抄录在用 ...

我今晚刚测试了一下 将 Web api  取得值 base64 改在服务器端处理 :即将 图片的base64 文本值直接存入数据表中,之后再刷新数据返至移动手机页面,发现采这方法是正确的,图片上传及保存返回过程只需要不到1秒时间就可以完成了!非常感谢徐工、梁总、刘老师的支持!本次测试功能是完美的!



附上我刚完成测试的记录图,当然我加了一下选中当前行时显示一下大图给我们查看,额外加班写代码辛苦点,但这成功感太值了!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +66 收起 理由
Tracy.Liu + 66 赞一个!

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部