需求:实现一个身份证的识别功能!看下方图片!
思路:(把用户上传的身份证图片转成base64请求接口发送给后端,后端返回对应的信息渲染到页面上就行了!)


<template>
<view class="uploader-container row wrap">
<view
class="upload-image-box"
v-for="(item, index) in fileList"
:key="index"
:style="{ width: previewWidth, height: previewHeight }"
>
<image
mode="widthFix"
class="img-preview"
:src="item.url"
:style="{ width: previewWidth, height: previewHeight }"
/>
<view
v-if="deletable"
class="close-icon row-center"
@click="deleteImage($event, index)"
>
<icon type="cancel" size="30" color="white" />
</view>
</view>
<view
ref="input"
class="uplader-upload row-center"
:style="{ width: previewWidth, height: previewHeight }"
@click="handleImage"
v-show="(fileList.length == 0 || mutiple) && fileList.length < maxUpload"
v-if="!useSlot"
>
<image
mode="widthFix"
class="img-preview"
:src="defaultImage"
:style="{ width: previewWidth, height: previewHeight }"
/>
<icon v-if="deletable" type="cancel" size="30" color="white" />
<!-- <view type="image" accept="image/*" class="uploader-input" /> -->
</view>
<view
class="uplader-upload-slot row-center"
@click="handleImage"
v-show="(fileList.length == 0 || mutiple) && fileList.length < maxUpload"
v-else
>
<slot></slot>
</view>
</view>
</template>
<script>
export default {
name: "uploader",
props: {
fileList: {
type: Array,
default: () => [],
},
// 默认不允许多选图片
mutiple: {
type: Boolean,
default: false,
},
// 限制上传文件数量
maxUpload: {
type: Number,
default: 1,
},
previewWidth: {
type: String,
default: "",
},
previewHeight: {
type: String,
default: "",
},
previewImage: {
type: String,
default: "",
},
// 是否可删除
deletable: {
type: Boolean,
default: false,
},
// camera
camera: {
type: Boolean,
default: false,
},
useSlot: {
type: Boolean,
default: false,
},
},
data() {
return {
defaultImage: null,
inputId: "",
};
},
create() {},
mounted() {
this.defaultImage = this.previewImage;
this.inputId = "fileid" + "_" + Math.random() * 10;
var input = document.createElement("input");
input.id = this.inputId;
input.type = "file";
if (this.camera) {
input.setAttribute("capture", "camera");
}
input.style.display = "none";
input.className = "uploader-input";
input.accept = "image/*";
let that = this;
input.onchange = (event) => {
let file = document.getElementById(this.inputId);
let fileName = file.value;
let files = file.files;
if (fileName == null || fileName == "") {
} else {
if (files[0]) {
let reader = new FileReader();
reader.readAsDataURL(files[0]);
reader.onload = function(e) {
var data = e.target.result;
that.defaultImage = data;
that.$emit("after-read", data);
};
}
}
// var file = this.file.target.files[0];
// var reader = new FileReader();
// reader.readAsDataURL(file);
// reader.onload = function(e) {
// var data = e.target.result;
// me.imgbase = data;
// console.log('Base64', data);
// };
};
this.$refs.input.$el.appendChild(input);
},
methods: {
handleImage() {
let file = document.getElementById(this.inputId);
file.click();
},
deleteImage(e, index) {
this.$emit("delete", index);
},
},
};
</script>
<style lang="scss">
.uploader-container {
.upload-image-box {
position: relative;
margin-right: 8rpx;
margin-bottom: 8rpx;
.img-preview {
border-radius: 10rpx;
}
.close-icon {
position: absolute;
right: -20rpx;
top: -15rpx;
width: 40rpx;
height: 40rpx;
background-color: red;
border-radius: 50%;
z-index: 20;
}
}
.img-preview {
width: 100%;
}
.uplader-upload {
position: relative;
// background-color: #f7f8fa;
cursor: pointer;
.uploader-input {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
opacity: 0;
top: 0;
left: 0;
z-index: 10;
cursor: pointer;
}
}
.uplader-upload-slot {
position: relative;
min-width: 160rpx;
min-height: 160rpx;
.uploader-input {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
opacity: 0;
top: 0;
left: 0;
z-index: 10;
cursor: pointer;
}
}
}
</style>
import Uploader from "@/components/image-uploader.vue";
在export default 下面注册
components: {
Uploader
},
data card{}里面是放的背景图片!
data() {
return {
card: {
url1: "../../static/imgs/idcard1.jpg",
url2: "../../static/imgs/idcard2.jpg",
},
}
},
template
<div class="box">
<Uploader :previewImage="card.url1"/>
</div>
效果如下
可以看见背景图片已经出来了!用户点击也可以选择图片了!

把图片转成base64
template
<div class="box">
<Uploader :previewImage="card.url1" @after-read="chooseImgFront" class="uploader"/>
</div>
图片已经转成了base64的转码,这打印base64到控制台!
chooseImgFront(e) {
console.log(e);
},

调用后端的接口,传入base64,根据你们的需求来,接口不是活的
import request from './http'
export default {
// 身份证正面识别接口
getIDCardFrontInfo(data) {
return request({
url: `blade-lhyg/user/user_staff/identity/frontBase64`,
method: 'POST',
data
});
},
// 身份证正面识别接口
getIDCardReverseInfo(data) {
return request({
url: `blade-lhyg/user/user_staff/identity/contraryBase64`,
method: 'POST',
data
});
},
// 身份认证
authentication(data) {
return request({
url: `blade-lhyg/user/user_staff/identity/authentication`,
method: 'POST',
data
});
},
}
调用接口代码:
async chooseImgFront(e) {
uni.showLoading({
title: "加载中",
mask: true,
});
try {
const { code, data } = await this.$api.certify.getIDCardFrontInfo({
phoneNo: this.$store.getters.phoneNo,
photo: e,
});
if (code === 200) {
Object.assign(this.form, data);
}
} catch (error) {
} finally {
uni.hideLoading();
}
},
数据已经请求过来了

接下来就是数据渲染,数据渲染就不写了太简单了,就是把数据保存到list[]里面然后{{}}就行了!
最终效果图

我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?