Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xzxt-api-report
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
雷紫添
xzxt-api-report
Commits
e8bb3650
Commit
e8bb3650
authored
Mar 04, 2021
by
雷紫添
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加影源ocr
parent
559d3ccf
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
600 additions
and
4 deletions
+600
-4
pom.xml
+16
-4
src/main/java/com/founder/controller/OcrController.java
+28
-0
src/main/java/com/founder/util/OcrFounder.java
+299
-0
src/main/resources/static/ocrFounder.html
+257
-0
src/main/webapp/WEB-INF/lib/jna-5.5.0.jar
+0
-0
src/main/webapp/WEB-INF/lib/ocr-precision-1.0.jar
+0
-0
No files found.
pom.xml
View file @
e8bb3650
...
@@ -43,8 +43,20 @@
...
@@ -43,8 +43,20 @@
<artifactId>
spring-boot-starter-data-redis
</artifactId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
<version>
2.1.7.RELEASE
</version>
<version>
2.1.7.RELEASE
</version>
</dependency>
</dependency>
<dependency>
<groupId>
cn.com.winmage
</groupId>
<artifactId>
ocr-precision
</artifactId>
<scope>
system
</scope>
<version>
1.0
</version>
<systemPath>
${pom.basedir}/src/main/webapp/WEB-INF/lib/ocr-precision-1.0.jar
</systemPath>
</dependency>
<dependency>
<groupId>
com.sun.jna
</groupId>
<artifactId>
jna
</artifactId>
<scope>
system
</scope>
<version>
5.5.0
</version>
<systemPath>
${pom.basedir}/src/main/webapp/WEB-INF/lib/jna-5.5.0.jar
</systemPath>
</dependency>
<dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
<artifactId>
hutool-all
</artifactId>
...
@@ -162,7 +174,7 @@
...
@@ -162,7 +174,7 @@
<repositories>
<repositories>
<repository>
<repository>
<id>
founder
</id>
<id>
founder
</id>
<url>
http://
47.92.108.28
:8081/nexus/content/groups/public/
</url>
<url>
http://
39.99.224.27
:8081/nexus/content/groups/public/
</url>
<releases>
<releases>
<enabled>
true
</enabled>
<enabled>
true
</enabled>
</releases>
</releases>
...
@@ -200,7 +212,7 @@
...
@@ -200,7 +212,7 @@
<!-- 公司的maven plugin仓库 -->
<!-- 公司的maven plugin仓库 -->
<pluginRepository>
<pluginRepository>
<id>
founder
</id>
<id>
founder
</id>
<url>
http://
47.92.108.28
:8081/nexus/content/groups/public/
</url>
<url>
http://
39.99.224.27
:8081/nexus/content/groups/public/
</url>
<releases>
<releases>
<enabled>
true
</enabled>
<enabled>
true
</enabled>
</releases>
</releases>
...
...
src/main/java/com/founder/controller/OcrController.java
View file @
e8bb3650
...
@@ -4,6 +4,7 @@ package com.founder.controller;
...
@@ -4,6 +4,7 @@ package com.founder.controller;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.founder.service.OcrService
;
import
com.founder.service.OcrService
;
import
com.founder.util.OcrFounder
;
import
org.apache.ibatis.annotations.Results
;
import
org.apache.ibatis.annotations.Results
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
@@ -20,6 +21,8 @@ import sun.misc.BASE64Encoder;
...
@@ -20,6 +21,8 @@ import sun.misc.BASE64Encoder;
public
class
OcrController
{
public
class
OcrController
{
@Autowired
@Autowired
private
OcrService
ocrjService
;
private
OcrService
ocrjService
;
@Autowired
private
OcrFounder
ocrFounder
;
@ResponseBody
@ResponseBody
@CrossOrigin
@CrossOrigin
@PostMapping
(
"/InvoiceOcr"
)
@PostMapping
(
"/InvoiceOcr"
)
...
@@ -43,5 +46,30 @@ public class OcrController {
...
@@ -43,5 +46,30 @@ public class OcrController {
System
.
out
.
println
(
df3
.
format
(
date1
)+
"结束时间"
);
System
.
out
.
println
(
df3
.
format
(
date1
)+
"结束时间"
);
return
j
;
return
j
;
}
}
@ResponseBody
@CrossOrigin
@PostMapping
(
"/OcrFounder"
)
public
JSONObject
queryOcrFounder
(
HttpServletRequest
request
,
MultipartFile
file
)
{
DateFormat
df2
=
DateFormat
.
getDateTimeInstance
();
//可以精确到时分秒
Date
date
=
new
Date
();
System
.
out
.
println
(
df2
.
format
(
date
)+
"开始时间"
);
String
result
=
""
;
byte
[]
fileByte
=
null
;
try
{
fileByte
=
file
.
getBytes
();
}
catch
(
IOException
e
)
{
}
try
{
result
=
ocrFounder
.
getOcrFounder
(
fileByte
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
JSONObject
j
=
new
JSONObject
();
j
.
put
(
"msg"
,
result
);
Date
date1
=
new
Date
();
DateFormat
df3
=
DateFormat
.
getDateTimeInstance
();
//可以精确到时分秒
System
.
out
.
println
(
df3
.
format
(
date1
)+
"结束时间"
);
return
j
;
}
}
}
src/main/java/com/founder/util/OcrFounder.java
0 → 100644
View file @
e8bb3650
package
com
.
founder
.
util
;
import
cn.com.winmage.soft.ocr.OcrUtil
;
import
com.sun.jna.ptr.LongByReference
;
import
org.springframework.stereotype.Component
;
import
javax.imageio.ImageIO
;
import
javax.imageio.stream.FileImageInputStream
;
import
java.awt.image.*
;
import
java.io.*
;
@Component
public
class
OcrFounder
{
private
static
String
dllPath
=
"/opt"
;
private
static
String
dllName
=
"libwmreader.so"
;
//lunix 使用 libwmreader.so
private
static
String
image
=
"D:\\ocr\\images\\img2.jpg"
;
public
String
getOcrFounder
(
byte
[]
data
)
throws
Exception
{
int
code
=
OcrUtil
.
init
(
dllPath
,
dllName
);
if
(
code
!=
0
){
System
.
out
.
println
(
"初始化失败,错误码:"
+
code
);
System
.
exit
(
0
);
}
code
=
OcrUtil
.
wm_set_image_stream
(
data
,
data
.
length
,
1
);
if
(
code
!=
0
){
System
.
out
.
println
(
"加载图片路径失败,错误码:"
+
code
);
System
.
exit
(
0
);
}
code
=
OcrUtil
.
recognize
();
if
(
code
!=
0
){
System
.
out
.
println
(
"识别图像失败,错误码:"
+
code
);
System
.
exit
(
0
);
}
String
result
=
OcrUtil
.
getResult
();
return
result
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
/*readImage(image);*/
int
code
=
OcrUtil
.
init
(
dllPath
,
dllName
);
if
(
code
!=
0
){
System
.
out
.
println
(
"初始化失败,错误码:"
+
code
);
System
.
exit
(
0
);
}
int
bit_depth
=
0
;
byte
[]
data
=
null
;
int
width
=
0
;
int
height
=
0
;
FileImageInputStream
input
=
null
;
try
{
input
=
new
FileImageInputStream
(
new
File
(
image
));
BufferedImage
sourceImg
=
ImageIO
.
read
(
new
FileInputStream
(
new
File
(
image
)));
width
=
sourceImg
.
getWidth
();
height
=
sourceImg
.
getHeight
();
ColorModel
color
=
sourceImg
.
getColorModel
();
bit_depth
=
color
.
getPixelSize
();
ByteArrayOutputStream
output
=
new
ByteArrayOutputStream
();
byte
[]
buf
=
new
byte
[
1024
];
int
numBytesRead
=
0
;
while
((
numBytesRead
=
input
.
read
(
buf
))
!=
-
1
)
{
output
.
write
(
buf
,
0
,
numBytesRead
);
}
data
=
output
.
toByteArray
();
output
.
close
();
input
.
close
();
}
catch
(
FileNotFoundException
ex1
)
{
ex1
.
printStackTrace
();
}
catch
(
IOException
ex1
)
{
ex1
.
printStackTrace
();
}
code
=
OcrUtil
.
wm_set_image_stream
(
data
,
data
.
length
,
1
);
if
(
code
!=
0
){
System
.
out
.
println
(
"加载图片路径失败,错误码:"
+
code
);
System
.
exit
(
0
);
}
/* ImageInfo imageInfo= loadTestImage(image);
data=imageInfo.getImage();
try {
FileInputStream inputfile = new FileInputStream(new File(image));
*//** he java.io.FileInputStream.available() method returns number of
* remaining bytes that can be read from this input stream without
* blocking by the next method call for this input stream. The next
* method call can also be the another thread.
* 通过available方法取得流的最大字符数*//*
byte[] b = new byte[inputfile.available()];
if (b.length == 0) {
System.out.print("the file is empty!!!");
return;
}
inputfile.read(b);
inputfile.close();
int b1 = b[0] & 0xff;
int b2 = b[1] & 0xff;
if (b1 == 0x42 && b2 == 0x4d) {
checkBmp(b);
} else if (b1 == 0x47 && b2 == 0x49) {
checkGif(b);
} else if (b1 == 0x89 && b2 == 0x50) {
checkPng(b);
} else if (b1 == 0xff && b2 == 0xd8) {
String type = "JPEG 图像";
int i = 2;
while (true) {
int marker = (b[i] & 0xff) << 8 | (b[i + 1] & 0xff);
int size = (b[i + 2] & 0xff) << 8 | (b[i + 3] & 0xff);
if (marker >= 0xffc0 && marker <= 0xffcf && marker != 0xffc4
&& marker != 0xffc8) {
bit_depth = (b[i + 4] & 0xff) * (b[i + 9] & 0xff);
break;
} else {
i += size + 2;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
int DataSizePerLine= (width* bit_depth+31)/32*4;
code=OcrUtil.wm_set_image_data(data,width,height,bit_depth,DataSizePerLine,1);
if(code!=0){
System.out.println("加载图片路径失败,错误码:"+code);
System.exit(0);
}*/
/* code=OcrUtil.loadImage(image,1);
if(code!=0){
System.out.println("加载图片路径失败,错误码:"+code);
System.exit(0);
}*/
code
=
OcrUtil
.
recognize
();
if
(
code
!=
0
){
System
.
out
.
println
(
"识别图像失败,错误码:"
+
code
);
System
.
exit
(
0
);
}
String
result
=
OcrUtil
.
getResult
();
System
.
out
.
println
(
"识别图像成功,识别结果:"
+
result
);
int
total
=
OcrUtil
.
getCellNum
();
System
.
out
.
println
(
"识别到文本行数为:"
+
total
);
LongByReference
left
=
new
LongByReference
();
LongByReference
top
=
new
LongByReference
();
LongByReference
right
=
new
LongByReference
();
LongByReference
bottom
=
new
LongByReference
();
byte
b
=
OcrUtil
.
getCellPos
(
1
,
left
,
top
,
right
,
bottom
);
/* if(b==0){
System.out.println("获取第一行位置信息失败,错误码:"+b);
System.exit(0);
}*/
System
.
out
.
println
(
"第一行坐标获取成功,左:"
+
left
.
getValue
()+
"右:"
+
right
.
getValue
()+
"上:"
+
top
.
getValue
()+
"下:"
+
bottom
.
getValue
());
OcrUtil
.
unInit
();
}
/*public static ImageInfo loadTestImage(String path) throws Exception{
File img = new File(path);
if (!img.exists()) {
return null;
}
BufferedImage image = null;
try {
image = ImageIO.read(img);
} catch (Exception e) {
if(image == null){
String newpath= readImage(path);//将CMYK模式转为rgb模式
img = new File(newpath);
image = ImageIO.read(img);
}
if(image == null){
System.out.println("转换图片失败,源图片路径:"+path+ ";原因:该图片无法转换成rgb");
return null;//如果还是无法转化,则跳过
}
}
if (image == null) {
return null;
}
final int width = image.getWidth();
final int height = image.getHeight();
int[] pix = new int[width * height];
PixelGrabber pg = new PixelGrabber(image, 0, 0, width, height, pix, 0, width);
try {
if (!pg.grabPixels()) {
return null;
}
} catch (InterruptedException e) {
System.out.println("转换图片失败,源图片路径:"+path+ ";原因:该图片无法转换成rgb.");
}
ImageInfo imageInfo = new ImageInfo();
imageInfo.setWidth(width);
imageInfo.setHeight(height);
byte[] rgb24 = new byte[width * height * 3];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int idx = width * i + j;
int color = pix[idx]; //获取像素
int red = ((color & 0x00FF0000) >> 16);
int green = ((color & 0x0000FF00) >> 8);
int blue = color & 0x000000FF;
int rgbIdx = idx * 3;
rgb24[rgbIdx] = (byte) red;
rgb24[rgbIdx + 1] = (byte) green;
rgb24[rgbIdx + 2] = (byte) blue;
}
}
imageInfo.setImage(rgb24);
return imageInfo;
}
public static String readImage(String filename) throws IOException {
File file = new File(filename);
ImageInputStream input = ImageIO.createImageInputStream(file);
Iterator readers = ImageIO.getImageReaders(input);
if(readers == null || !readers.hasNext()) {
throw new RuntimeException("1 No ImageReaders found");
}
ImageReader reader = (ImageReader) readers.next();
reader.setInput(input);
String format = reader.getFormatName() ;
BufferedImage image;
if ( "JPEG".equalsIgnoreCase(format) ||"JPG".equalsIgnoreCase(format) ) {
try {
// 尝试读取图片 (包括颜色的转换).
image = reader.read(0); //RGB
} catch (IIOException e) {
// 读取Raster (没有颜色的转换).
Raster raster = reader.readRaster(0, null);//CMYK
image = createJPEG4(raster);
}
image.getGraphics().drawImage(image, 0, 0, null);
String dstfilename = filename.substring(0,filename.lastIndexOf("."))+"_rgb"+filename.substring(filename.lastIndexOf("."));
String newfilename = filename;
File newFile = new File(dstfilename);
FileOutputStream out = new FileOutputStream(newFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.flush();
out.close();
return dstfilename;
}
return null;
}
private static BufferedImage createJPEG4(Raster raster) {
int w = raster.getWidth();
int h = raster.getHeight();
byte[] rgb = new byte[w * h * 3];
//彩色空间转换
float[] Y = raster.getSamples(0, 0, w, h, 0, (float[]) null);
float[] Cb = raster.getSamples(0, 0, w, h, 1, (float[]) null);
float[] Cr = raster.getSamples(0, 0, w, h, 2, (float[]) null);
float[] K = raster.getSamples(0, 0, w, h, 3, (float[]) null);
for (int i = 0, imax = Y.length, base = 0; i < imax; i++, base += 3) {
float k = 220 - K[i], y = 255 - Y[i], cb = 255 - Cb[i],
cr = 255 - Cr[i];
double val = y + 1.402 * (cr - 128) - k;
val = (val - 128) * .65f + 128;
rgb[base] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff
: (byte) (val + 0.5);
val = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128) - k;
val = (val - 128) * .65f + 128;
rgb[base + 1] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff
: (byte) (val + 0.5);
val = y + 1.772 * (cb - 128) - k;
val = (val - 128) * .65f + 128;
rgb[base + 2] = val < 0.0 ? (byte) 0 : val > 255.0 ? (byte) 0xff
: (byte) (val + 0.5);
}
raster = Raster.createInterleavedRaster(new DataBufferByte(rgb, rgb.length), w, h, w * 3, 3, new int[]{0, 1, 2}, null);
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorModel cm = new ComponentColorModel(cs, false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
return new BufferedImage(cm, (WritableRaster) raster, true, null);
}*/
}
src/main/resources/static/ocrFounder.html
0 → 100644
View file @
e8bb3650
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
>
<title>
Layui
</title>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1"
>
<link
rel=
"stylesheet"
href=
"js/layui/css/layui.css"
media=
"all"
>
<!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
</head>
<body>
<blockquote
class=
"layui-elem-quote"
>
为节省服务器开销,以下示例均未配置真实上传接口,所以每次上传都会报提示:请求上传接口出现异常,这属于正常现象。
</blockquote>
<fieldset
class=
"layui-elem-field layui-field-title"
style=
"margin-top: 30px;"
>
<legend>
常规使用:普通图片上传
</legend>
<p
id=
"demoText2"
></p>
</fieldset>
<div
class=
"layui-upload"
>
<button
type=
"button"
class=
"layui-btn"
id=
"test1"
>
上传图片
</button>
<div
class=
"layui-upload-list"
style=
"width: 300px;height: 300px"
>
<img
class=
"layui-upload-img"
id=
"demo1"
>
<p
id=
"demoText"
></p>
</div>
</div>
<script
src=
"js/layui/layui.js"
charset=
"utf-8"
></script>
<!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
<script>
layui
.
use
(
'upload'
,
function
(){
var
$
=
layui
.
jquery
,
upload
=
layui
.
upload
;
var
posterWidth
=
500
,
posterHeight
=
500
;
//普通图片上传
var
uploadInst
=
upload
.
render
({
elem
:
'#test1'
,
url
:
'/ocr/OcrFounder'
//改成您自己的上传接口
,
size
:
500
,
before
:
function
(
obj
){
//预读本地文件示例,不支持ie8
/* var img = new Image();
img.src = result;
layer.msg('分辨率'+img.width);
if (posterWidth < img.width || posterHeight < img.height) {
layer.msg('分辨率需要低于500');
}*/
obj
.
preview
(
function
(
index
,
file
,
result
){
$
(
'#demo1'
).
attr
(
'src'
,
result
);
//图片链接(base64)
});
layer
.
msg
(
'玩命提示中'
);
}
,
done
:
function
(
res
){
//如果上传失败
if
(
res
.
code
>
0
){
return
layer
.
msg
(
'上传失败'
);
}
//上传成功
$
(
'#demoText2'
).
html
(
res
.
msg
);
}
,
error
:
function
(){
//演示失败状态,并实现重传
var
demoText
=
$
(
'#demoText'
);
demoText
.
html
(
'<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>'
);
demoText
.
find
(
'.demo-reload'
).
on
(
'click'
,
function
(){
uploadInst
.
upload
();
});
}
});
//多图片上传
upload
.
render
({
elem
:
'#test2'
,
url
:
'/ocr/InvoiceOcr'
//改成您自己的上传接口
,
multiple
:
true
,
before
:
function
(
obj
){
//预读本地文件示例,不支持ie8
obj
.
preview
(
function
(
index
,
file
,
result
){
$
(
'#demo2'
).
append
(
'<img src="'
+
result
+
'" alt="'
+
file
.
name
+
'" class="layui-upload-img">'
)
});
}
,
done
:
function
(
res
){
//上传完毕
}
});
//指定允许上传的文件类型
upload
.
render
({
elem
:
'#test3'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
accept
:
'file'
//普通文件
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
);
}
});
upload
.
render
({
//允许上传的文件后缀
elem
:
'#test4'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
accept
:
'file'
//普通文件
,
exts
:
'zip|rar|7z'
//只允许上传压缩文件
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
)
}
});
upload
.
render
({
elem
:
'#test5'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
accept
:
'video'
//视频
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
)
}
});
upload
.
render
({
elem
:
'#test6'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
accept
:
'audio'
//音频
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
)
}
});
//设定文件大小限制
upload
.
render
({
elem
:
'#test7'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
size
:
60
//限制文件大小,单位 KB
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
)
}
});
//同时绑定多个元素,并将属性设定在元素上
upload
.
render
({
elem
:
'.demoMore'
,
before
:
function
(){
layer
.
tips
(
'接口地址:'
+
this
.
url
,
this
.
item
,
{
tips
:
1
});
}
,
done
:
function
(
res
,
index
,
upload
){
var
item
=
this
.
item
;
console
.
log
(
item
);
//获取当前触发上传的元素,layui 2.1.0 新增
}
})
//选完文件后不自动上传
upload
.
render
({
elem
:
'#test8'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
auto
:
false
//,multiple: true
,
bindAction
:
'#test9'
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
)
}
});
//拖拽上传
upload
.
render
({
elem
:
'#test10'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
layui
.
$
(
'#uploadDemoView'
).
removeClass
(
'layui-hide'
).
find
(
'img'
).
attr
(
'src'
,
res
.
files
.
file
);
console
.
log
(
res
)
}
});
//多文件列表示例
var
demoListView
=
$
(
'#demoList'
)
,
uploadListIns
=
upload
.
render
({
elem
:
'#testList'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
accept
:
'file'
,
multiple
:
true
,
auto
:
false
,
bindAction
:
'#testListAction'
,
choose
:
function
(
obj
){
var
files
=
this
.
files
=
obj
.
pushFile
();
//将每次选择的文件追加到文件队列
//读取本地文件
obj
.
preview
(
function
(
index
,
file
,
result
){
var
tr
=
$
([
'<tr id="upload-'
+
index
+
'">'
,
'<td>'
+
file
.
name
+
'</td>'
,
'<td>'
+
(
file
.
size
/
1024
).
toFixed
(
1
)
+
'kb</td>'
,
'<td>等待上传</td>'
,
'<td>'
,
'<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
,
'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
,
'</td>'
,
'</tr>'
].
join
(
''
));
//单个重传
tr
.
find
(
'.demo-reload'
).
on
(
'click'
,
function
(){
obj
.
upload
(
index
,
file
);
});
//删除
tr
.
find
(
'.demo-delete'
).
on
(
'click'
,
function
(){
delete
files
[
index
];
//删除对应的文件
tr
.
remove
();
uploadListIns
.
config
.
elem
.
next
()[
0
].
value
=
''
;
//清空 input file 值,以免删除后出现同名文件不可选
});
demoListView
.
append
(
tr
);
});
}
,
done
:
function
(
res
,
index
,
upload
){
if
(
res
.
files
.
file
){
//上传成功
var
tr
=
demoListView
.
find
(
'tr#upload-'
+
index
)
,
tds
=
tr
.
children
();
tds
.
eq
(
2
).
html
(
'<span style="color: #5FB878;">上传成功</span>'
);
tds
.
eq
(
3
).
html
(
''
);
//清空操作
return
delete
this
.
files
[
index
];
//删除文件队列已经上传成功的文件
}
this
.
error
(
index
,
upload
);
}
,
error
:
function
(
index
,
upload
){
var
tr
=
demoListView
.
find
(
'tr#upload-'
+
index
)
,
tds
=
tr
.
children
();
tds
.
eq
(
2
).
html
(
'<span style="color: #FF5722;">上传失败</span>'
);
tds
.
eq
(
3
).
find
(
'.demo-reload'
).
removeClass
(
'layui-hide'
);
//显示重传
}
});
//绑定原始文件域
upload
.
render
({
elem
:
'#test20'
,
url
:
'https://httpbin.org/post'
//改成您自己的上传接口
,
done
:
function
(
res
){
layer
.
msg
(
'上传成功'
);
console
.
log
(
res
)
}
});
});
</script>
</body>
</html>
src/main/webapp/WEB-INF/lib/jna-5.5.0.jar
0 → 100644
View file @
e8bb3650
File added
src/main/webapp/WEB-INF/lib/ocr-precision-1.0.jar
0 → 100644
View file @
e8bb3650
File added
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment