本教程展示如何在Java应用程序中使用LEADTOOLS云服务对任务进行排队。
| 概述 | |
|---|---|
| 总结 | 本教程介绍如何制作队列请求并使用Java应用程序中的LEADTOOLS云服务处理结果。 |
| 完成时间 | 30分钟 |
| 项目 | 下载教程项目(8kb) |
| 平台 | LEADTOOLS云服务API |
| IDE | IntelliJ |
| 语言 | Java |
| 开发许可 | 下载LEADTOOLS |
请务必查看以下站点,以获得有关LEADTOOLS云服务API的信息。
创建帐户使用LEADTOOLS托管云服务来获得两者应用程序ID而且密码字符串。
LEADTOOLS服务计划提供:
| 服务计划 | 描述 |
|---|---|
| 免费试用 | 免费评估 |
| 页面包 | 预付费页包 |
| 订阅 | 预付月处理页 |
要进一步了解这些产品,请参阅托管云服务页面。
如需获取应用ID和应用密码,请参见使用LEADTOOLS托管云服务创建帐户和应用程序.
在IDE中,使用Maven创建一个新的Java项目,并将以下所需的Maven依赖项添加到pom.xml文件:
<依赖><groupId>org.json</ groupId><artifactId>json</ artifactId><版本>20210307</版本></依赖>
创建项目并添加包之后,就可以开始编码了。
在项目文件,打开App.java.添加以下内容进口上面的语句。
进口org.json.JSONArray;进口org.json.JSONObject;进口java.io.File;进口java.io.FileNotFoundException;进口java.net.URI;进口java.net.http.HttpClient;进口java.net.http.HttpRequest;进口java.net.http.HttpRequest.BodyPublisher;进口java.net.http.HttpResponse;进口java.nio.charset.StandardCharsets;进口java.util.Base64;进口java.util.concurrent.CompletableFuture;进口java.util.concurrent.ExecutionException;进口java.util.concurrent.TimeUnit;进口java.util.concurrent.TimeoutException;
添加一个名为队列().的队列()方法发送一个还是请求LEADTOOLS云服务API。如果成功,将返回一个唯一标识符(GUID),然后使用这个GUID进行查询。
将下面的代码添加到队列()方法。
私人静态无效队列(){HttpClient客户机= HttpClient. newhttpclient ();//如果使用URL到文件字符串fileURL =“https://demo.leadtools.com/images/cloud_samples/ocr1气管无名动脉瘘管的- 4.”;字符串uploadUrl = String.format(“还是?fileurl = % s”, fileURL);结果结果= postAsync(uploadUrl,零、客户端);//如果上传文件为多部分内容://文件uploadFile = new文件("path/to/ File ");// String uploadUrl = "UploadFile";// Results Results = postAsync(uploadUrl, uploadFile, client);如果(results.getStatusCode() == 200) {//服务返回的唯一IDSystem.out.println (服务返回的唯一ID:+ results.getData ());checkFileForVerification (results.getData(),客户端);}其他的{System.out.println ("请求失败,响应如下"+ results.getStatusCode ());}}
在本例中,我们将首先对ExtractText返回的GUID还是在队列的任务。在核实ExtractText请求已排队,我们将排队一个转换要求将文件转换为PDF格式。
创建两个名为queueExtractText(字符串id, HttpClient客户机)而且queueConversion(String id, HttpClient client),在队列()方法。将下面的代码添加到queueExtractText ()方法。
私人静态无效queueExtractText(字符串id, HttpClient客户机){//文件中要标记进行处理的第一页intfirstPage = 1;//发送一个-1的值将指示服务应该处理文件中的所有页面。intlastPage = -1;字符串recognitionUrl = String.format(“认可/ ExtractText吗?珍宝= % s&lastPage = % s&guid = % s”, firstPage, lastPage, id);结果结果= postAsync(recognitionUrl,零、客户端);如果(results.getStatusCode() == 200) {queueConversion (id、客户);}其他的{System.out.println ("请求失败,响应如下"+ results.getStatusCode ());}}
将下面的代码添加到queueConversion ()方法。方法中调用此方法queueExtractText ()方法,如上所示。
私人静态无效queueConversion(String id, HttpClient client) {//文件中要标记进行处理的第一页intfirstPage = 1;//发送一个-1的值将指示服务应该处理文件中的所有页面。intlastPage = -1;//文件输出格式对应的枚举。对于这个脚本,我们将转换为tif。intfileFormat = 4;字符串conversionUrl = String.format(“转换/转换?珍宝= % s&lastPage = % s&guid = % s&format = % s”, firstPage, lastPage, id, fileFormat);结果结果= postAsync(conversionUrl,零、客户端);如果(results.getStatusCode() == 200) {运行(id、客户);}其他的{System.out.println ("转换请求未能与以下响应排队:"+ results.getStatusCode ());}}
与queueExtractText而且queueConversion队列时,我们可以使用运行请求。
请注意
这将标记该文件已准备好进行处理。一旦一个文件被标记为处理,或者已经完成处理,就不能在该文件上排队或运行进一步的请求。
创建另外两个命名为运行HttpClient客户端而且checkFileForVerification(字符串id, HttpClient客户机).的run ()方法将在queueConversion ()方法,而checkFileForVerification ()方法在队列方法确认上传请求和发起queueExtractText.
将下面的代码添加到run ()方法。
私人静态无效运行(HttpClient客户端){字符串uploadUrl = String.format(“跑?id = % s "、身份证);结果结果= postAsync(uploadUrl,零、客户端);如果(results.getStatusCode() == 200) {查询(id、客户端);}其他的{System.out.println ("请求失败,响应如下"+ results.getStatusCode ());}}
将下面的代码添加到checkFileForVerification方法。
私人静态无效checkFileForVerification(字符串id, HttpClient客户端){字符串queryUrl = String.format(“查询?id = % s "、身份证);结果结果;JSONObject returnedData;intfileStatus = 0;做{试一试{结果= postAsync(queryUrl,零、客户端);returnedData =新JSONObject (results.getData ());fileStatus =返回数据。getint (“FileStatus”);thread . sleep (500);}抓(InterruptedException e) {/ / e.printStackTrace ();}}而(fileStatus = 0 || fileStatus == 123);如果(fileStatus == 122){queueExtractText (id、客户);}其他的{System.out.println ("文件状态验证失败:"+ fileStatus);}}
接下来,创建一个名为查询HttpClient客户端控件提供的GUIDqueueExtractText ()方法。如果成功,响应体将包含JSON格式的所有请求数据。一定要打电话给查询()方法中的run ()方法,如上所示。将下面的代码添加到查询()方法。
私人静态无效查询(HttpClient客户端){字符串queryUrl = String.format(“查询?id = % s "、身份证);结果结果;JSONObject returnedData;intfileStatus = 0;做{试一试{结果= postAsync(queryUrl,零、客户端);returnedData =新JSONObject (results.getData ());fileStatus =返回数据。getint (“FileStatus”);如果(fileStatus != 200) Thread.sleep(5000);}抓(InterruptedException e) {returnedData =新JSONObject ();/ / e.printStackTrace ();}}而(|| fileStatus == 100 || fileStatus == 123);System.out.println ("文件已完成处理,返回代码:"+ fileStatus);如果(fileStatus != 200) {返回;}parseJson (returnedData.get (“RequestData”) .toString ());}
然后,创建两个名为parseJson (json字符串)而且postAsync(字符串路径,文件文件,HttpClient客户端),它们都将在查询()方法,如上所示。
将下面的代码添加到parseJson ()方法来处理返回的JSON数据。
私人静态无效parseJson(String json) {JSONArray requestArray =新JSONArray (json);为(对象requestObject: requestArray) {如果(requestObject运算符JSONObject) {JSONObject requestReturn = (JSONObject) requestObject;System.out.println (“服务类型:”+ requestReturn.getString (“ServiceType”));System.out.println (返回的数据:“);如果(requestReturn.get (“ServiceType”) .toString () .equals (“转换”)) {JSONArray urlArray =新JSONArray (requestReturn.get (“url”) .toString ());为(对象obj: urlArray) {System.out.println (obj.toString ());}}其他的{System.out.println (requestReturn.get (“数据”) .toString ());}System.out.println ("******************************************");}}}
将下面的代码添加到postAsync ()方法来创建一个客户端连接来请求GUID和JSON数据。上面写着替换为应用程序ID而且替换为应用程序密码一定要把你的申请编号及密码相应的行动。
私人静态postAsync(字符串路径,对象主体,HttpClient客户端){字符串AppId =“替换为应用程序ID”;密码=“替换为应用程序密码”;字符串authHeader =“基本”+新字符串(Base64.getEncoder()。编码(AppId +”:“+密码).getBytes (StandardCharsets.UTF_8)));字符串hostedServicesUrl =“https://azure.leadtools.com/api/”;BodyPublisher thisBody = httprequest .BodyPublisher . ofstring (“零”);如果(身体运算符BodyPublisher) {thisBody = (BodyPublisher) body;}其他的如果(身体运算符文件){试一试{thisBody = HttpRequest.BodyPublishers.ofFile(((File) body).toPath());}抓(FileNotFoundException e) {/ / e.printStackTrace ();}}HttpRequest request = HttpRequest. newbuilder (). post (thisBody).uri (URI。创建(hostedServicesUrl +路径).header (“接受”,“application / json”).header (“授权”authHeader).header (“内容类型”,“文本/普通”).build ();CompletableFuture> result =客户端。(请求,HttpResponse.BodyHandlers.ofString是以()); 结果结果=新结果();results.setData ("");results.setStatusCode (0);试一试{results.setData (result.thenApply (HttpResponse::身体)。(5, TimeUnit.SECONDS));results.setStatusCode (result.thenApply (HttpResponse:: statusCode)。(5, TimeUnit.SECONDS));}抓(InterruptedException | ExecutionException | TimeoutException e) {e.printStackTrace ();}返回结果;}
类的结果,应用程序将需要一个助手类来存储帖子请求。创建一个名为结果并将下面的代码添加到其中。
私人静态类结果{私人字符串数据;私人intstatusCode;公共字符串getData() {返回数据;}公共无效setData(字符串数据){这.data =数据;}公共intgetStatusCode () {返回statusCode;}公共无效setStatusCode (intstatusCode) {这.statusCode = statusCode;}}
为了测试运行此代码,请务必添加队列();到静空主部分。
按下运行项目Alt + F5,或选择执行命令->调试App.
如果正确地执行了这些步骤,将出现控制台,应用程序将显示来自队列任务的JSON数据结果。
本教程展示了如何在Java应用程序中通过LEADTOOLS云服务API对任务进行排队。