【问题标题】:Uploading a file to ocr.space api将文件上传到 ocr.space api
【发布时间】:2016-05-26 14:35:18
【问题描述】:

"No file uploaded or URL provided" when calling ocr.space API

我想知道我们如何将文件上传到服务器,如上面的 url 中发送的那样,该代码在 C# 中,但我希望它在 Java 中用于 android

我的代码是

`final HttpClient httpclient = new DefaultHttpClient();
            final HttpPost httppost = new HttpPost("https://api.ocr.space/parse/image");

            //httppost.addHeader("User-Agent", "Mozilla/5.0");
            //httppost.addHeader("Accept-Language", "en-US,en;q=0.5");
              //con.setRequestMethod("POST");
               // con.setRequestProperty("User-Agent", "Mozilla/5.0");
               // con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

            final FileBody image = new FileBody(new File(fileName));

            final MultipartEntity reqEntity = new MultipartEntity();
            reqEntity.addPart("isOverlayRequired", new StringBody(Boolean.toString(isOverlayRequired)));
            reqEntity.addPart("language", new StringBody(langCode));
            reqEntity.addPart("apikey", new StringBody(apiKey));
            reqEntity.addPart("file",image);
            httppost.setEntity(reqEntity);

            final HttpResponse response = httpclient.execute(httppost);
            final HttpEntity resEntity = response.getEntity();
            final StringBuilder sb = new StringBuilder();
            if (resEntity != null) {
                final InputStream stream = resEntity.getContent();
                byte bytes[] = new byte[4096];
                int numBytes;
                while ((numBytes=stream.read(bytes))!=-1) {
                    if (numBytes!=0) {
                        sb.append(new String(bytes, 0, numBytes));
                    }
                }
            }

            Log.i("data", sb.toString());`

但它给出了例外

javax.net.ssl.SSLException: hostname in certificate didn't match: <api.ocr.space> != <ocr.a9t9.com> OR <ocr.a9t9.com> OR <www.ocr.a9t9.com>

【问题讨论】:

  • 嘿伙计!!你解决了这个问题吗?请提供解决方案!!

标签: java android ocr


【解决方案1】:

以下是我的主要代码:

private String sendPost(boolean isOverlayRequired, File imageUrl, String language) throws Exception {

        StringBuffer responseString = new StringBuffer();
        try {
            MultipartUtility multipart = new MultipartUtility(url, "UTF-8");

            multipart.addFormField("isOverlayRequired", Boolean.toString(isOverlayRequired));
            multipart.addFilePart("file", imageUrl);
            List<String> response = multipart.finish();

            for (String line : response) {
                responseString.append(line);
            }
        } catch (IOException ex) {
            Log.v("OCR Exception",ex.getMessage());
        }

        //return result
        return String.valueOf(responseString);
    }

API 密钥应该添加到标题中。我已经在 MultiPartUtility 代码本身中添加了它。以下是我的代码:

package com.example.ab00428268.virtualassistant.Utils;

import android.util.Log;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

public class MultipartUtility {
private final String boundary;
private static final String LINE_FEED = "\r\n";
private HttpURLConnection httpConn;
private String charset;
private OutputStream outputStream;
private PrintWriter writer;

/**
 * This constructor initializes a new HTTP POST request with content type
 * is set to multipart/form-data
 * @param requestURL
 * @param charset
 * @throws IOException
 */
public MultipartUtility(String requestURL, String charset)
        throws IOException {
    this.charset = charset;

    // creates a unique boundary based on time stamp
    boundary = "===" + System.currentTimeMillis() + "===";

    URL url = new URL(requestURL);
    httpConn = (HttpURLConnection) url.openConnection();
    httpConn.setUseCaches(false);
    httpConn.setDoOutput(true); // indicates POST method
    httpConn.setDoInput(true);
    httpConn.setRequestProperty("Content-Type",
            "multipart/form-data; boundary=" + boundary);
    httpConn.setRequestProperty("User-Agent", "Mozilla/5.0");
    httpConn.setRequestProperty("apikey", "YourAPIKey");
    outputStream = httpConn.getOutputStream();
    writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
            true);
   }

   public void addFormField(String name, String value) {
    writer.append("--" + boundary).append(LINE_FEED);
    writer.append("Content-Disposition: form-data; name=\"" + name + "\"")
            .append(LINE_FEED);
    writer.append("Content-Type: text/plain; charset=" + charset).append(
            LINE_FEED);
    writer.append(LINE_FEED);
    writer.append(value).append(LINE_FEED);
    writer.flush();
   }


  public void addFilePart(String fieldName, File uploadFile)
        throws IOException {
    String fileName = uploadFile.getName();
    writer.append("--" + boundary).append(LINE_FEED);
    writer.append(
            "Content-Disposition: form-data; name=\"" + fieldName
                    + "\"; filename=\"" + fileName + "\"")
            .append(LINE_FEED);
    writer.append(
            "Content-Type: "
                    + URLConnection.guessContentTypeFromName(fileName))
            .append(LINE_FEED);
    Log.v("MultiPart",fileName);
    Log.v("MultiPart",uploadFile.getPath());
    writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
    writer.append(LINE_FEED);
    writer.flush();

    FileInputStream inputStream = new FileInputStream(uploadFile);
    byte[] buffer = new byte[4096];
    int bytesRead = -1;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }
    outputStream.flush();
    inputStream.close();

    writer.append(LINE_FEED);
    writer.flush();
   }


   public void addHeaderField(String name, String value) {
    writer.append(name + ": " + value).append(LINE_FEED);
    writer.flush();
   }


  public List<String> finish() throws IOException {
    List<String> response = new ArrayList<String>();

    writer.append(LINE_FEED).flush();
    writer.append("--" + boundary + "--").append(LINE_FEED);
    writer.close();

    // checks server's status code first
    int status = httpConn.getResponseCode();
    Log.v("MultiPart",""+httpConn.getResponseMessage());
    if (status == HttpURLConnection.HTTP_OK) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                httpConn.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null) {
            Log.v("MultiPart",""+line);
            response.add(line);
        }
        reader.close();
        httpConn.disconnect();
     } else {
        throw new IOException("Server returned non-OK status: " + status);
     }

    return response;
   }
  }

【讨论】:

    【解决方案2】:

    你可以试试给定的link

    但是这个网站提供了带有 uri 而不是文件的示例。

    试试这个对我有用的代码。

    String charset = "UTF-8";
    File uploadFile1 = new File(fileName);
    
    String requestURL = "https://api.ocr.space/parse/image";
    
    try {
        MultipartUtility multipart = new MultipartUtility(requestURL, charset);
    
        multipart.addHeaderField("User-Agent", "Mozilla/5.0");
        multipart.addHeaderField("Accept-Language", "en-US,en;q=0.5");
    
        multipart.addFormField("apikey", apiKey);
        multipart.addFormField("isOverlayRequired", Boolean.toString(isOverlayRequired));
        multipart.addFormField("language", langCode);
        multipart.addFilePart("file", uploadFile1);
    
    
        List<String> response = multipart.finish();
    
        System.out.println("SERVER REPLIED:");
    
        for (String line : response) {
            System.out.println(line);
        }
    } catch (IOException ex) {
        System.err.println(ex);
    }
    

    【讨论】:

    • 我已经尝试过这个网站,但我无法上传我的文件:(
    • 嗨!我收到“ Error ....java.io.IOException: Server returned non-OK status: 403”。请您提供完整的示例!
    • 你检查过你的 api 密钥吗?
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多