上傳圖片了就會報org.apache.http.client.HttpResponseException: Not Foun

來源:互聯網
上載者:User
一上傳圖片就會報上面的錯, 的錯,但是圖片有地址,URL的地址是對的但是有圖片有地址的,就是上不去,斷點返回的是404.

回複內容:

一上傳圖片就會報上面的錯, 的錯,但是圖片有地址,URL的地址是對的但是有圖片有地址的,就是上不去,斷點返回的是404.

404說明是用戶端的問題導致伺服器無法處理,https://segmentfault.com/a/11...

建議棄用httpclient,使用HttpURLConnection:

import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.HashMap;import java.util.List;import java.util.Map;public class HttpConnector {    public static final int TIMEOUT_MS = 10 * 1000;    public static String performRequest(String url, File file, Map additionalHeaders) {        String response = null;        try {            HashMap map = new HashMap();            if (additionalHeaders != null)                map.putAll(additionalHeaders);            URL parsedUrl = new URL(url);            HttpURLConnection connection = openConnection(parsedUrl, file);            for (String headerName : map.keySet()) {                connection.addRequestProperty(headerName, map.get(headerName));            }            int responseCode = connection.getResponseCode();            if (responseCode == -1) {                // -1 is returned by getResponseCode() if the response code could not be retrieved.                // Signal to the caller that something was wrong with the connection.                throw new IOException("Could not retrieve response code from HttpUrlConnection.");            }            String charset = "utf-8";            String contentEncoding = null;            String contentType = null;            for (Map.Entry> header : connection.getHeaderFields().entrySet()) {                if (header.getKey() != null) {                    List headerValueList = header.getValue();                    if (headerValueList != null && headerValueList.size() > 0) {                        StringBuffer headerValueSB = new StringBuffer();                        for (int i = 0; i < headerValueList.size(); i++) {                            headerValueSB.append(headerValueList.get(i));                            if (i != headerValueList.size() - 1) {                                headerValueSB.append(";");                            }                        }                        if (header.getKey().equals("Content-Type")) {                            contentType = headerValueSB.toString();                        } else if (header.getKey().equals("Content-Encoding")) {                            contentEncoding = headerValueSB.toString();                        }                    }                }            }            charset = parseCharset(contentType, contentEncoding, charset);            if (responseCode == 200) {                //成功                response = entityFromConnection(connection, charset);            }        } catch (Exception e) {//            e.printStackTrace();        }        return response;    }    /**     * Create an {@link HttpURLConnection} for the specified {@code url}.     */    protected static HttpURLConnection createConnection(URL url) throws IOException {        return (HttpURLConnection) url.openConnection();    }    /**     * Opens an {@link HttpURLConnection} with parameters.     *     * @param url     * @return an open connection     * @throws IOException     */    private static HttpURLConnection openConnection(URL url, File file) throws IOException {        HttpURLConnection connection = createConnection(url);        connection.setConnectTimeout(TIMEOUT_MS);        connection.setReadTimeout(TIMEOUT_MS);        connection.setUseCaches(false);        connection.setDoInput(true);        connection.setRequestMethod("POST");        addBodyIfExists(connection, file);        return connection;    }    private static String parseCharset(String contentType, String contentEncoding,                                       String defaultCharset) {        if (contentType != null) {            String[] params = contentType.split(";");            for (int i = 1; i < params.length; i++) {                String[] pair = params[i].trim().split("=");                if (pair.length == 2) {                    if (pair[0].equals("charset")) {                        return pair[1];                    }                }            }        }        if (contentEncoding != null && !contentEncoding.equals("")) {            return contentEncoding;        }        return defaultCharset;    }    private static String entityFromConnection(HttpURLConnection connection, String charset) throws IOException {        String data = null;        InputStream inputStream;        try {            inputStream = connection.getInputStream();        } catch (IOException ioe) {            inputStream = null;        }        if (inputStream != null) {            data = readData(inputStream, charset);        }        return data;    }    private static String readData(InputStream inSream, String charsetName) throws IOException {        ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len = -1;        while ((len = inSream.read(buffer)) != -1) {            outStream.write(buffer, 0, len);        }        byte[] data = outStream.toByteArray();        outStream.close();        inSream.close();        return new String(data, charsetName);    }    private static void addBodyIfExists(HttpURLConnection connection, File file) {        try {            if (file != null) {                connection.setDoOutput(true);                connection.addRequestProperty("Content-Type", "application/octet-stream; charset=utf-8");                DataOutputStream out = new DataOutputStream(connection.getOutputStream());                FileInputStream fStream = new FileInputStream(file);                /* 設定每次寫入1024bytes */                try {                    int bufferSize = 1024;                    byte[] buffer = new byte[bufferSize];                    int length = -1;                /* 從檔案讀取資料到緩衝區 */                    while ((length = fStream.read(buffer)) != -1) {                        /* 將資料寫入DataOutputStream中 */                        out.write(buffer, 0, length);                    }                } finally {                    fStream.close();                    out.flush();                    out.close();                }            }        } catch (IOException e) {            e.printStackTrace();        }    }}

調用:String response = HttpConnector.performRequest(uploadUrl, file, null);

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.