Загрузка Java/PNG в .php

Вот что имеет локальный файл .png, когда я редактирую его с помощью блокнота:

http://i.stack.imgur.com/TjNGl.png

Вот что имеет загруженный файл .png, когда я редактирую его с помощью блокнота:

http://i.stack.imgur.com/2tXgN.png

Почему «NUL» заменяется на «\ 0»? Это делает файл поврежденным и непригодным для использования.

Я использую этот код Java для загрузки локального .png:

public static byte[] imageToByte(File file) throws FileNotFoundException {
    FileInputStream fis = new FileInputStream(file);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    try {
        for (int readNum; (readNum = fis.read(buf)) != -1;) {
            bos.write(buf, 0, readNum);
        }
    } catch (IOException ex) {
    }
    byte[] bytes = bos.toByteArray();
    return bytes;
}

public static void sendPostData(String url, HashMap<String, String> data)
        throws Exception {
    URL siteUrl = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection();
    conn.setRequestMethod("POST");
    conn.setDoOutput(true);
    conn.setDoInput(true);

    DataOutputStream out = new DataOutputStream(conn.getOutputStream());

    Set keys = data.keySet();
    Iterator keyIter = keys.iterator();
    String content = "";
    for (int i = 0; keyIter.hasNext(); i++) {
        Object key = keyIter.next();
        if (i != 0) {
            content += "&";
        }
        content += key + "=" + URLEncoder.encode(data.get(key), "UTF-8");
    }
    System.out.println(content);
    out.writeBytes(content);
    out.flush();
    out.close();
    BufferedReader in = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
    String line = "";
    while ((line = in.readLine()) != null) {
        System.out.println(line);
    }
    in.close();
}

person Sam    schedule 03.08.2011    source источник


Ответы (1)


я тут только предполагаю

Но я думаю, что так работает URLEncoder... он не декодирует правильные байты символов. Проверьте это http://www.w3schools.com/tags/ref_urlencode.asp

NUL null character %00

Если у вас есть доступ к вашему сайту php.. Я рекомендую опубликовать закодированное base64 представление данных png.. в PHP.., а затем декодировать base64 на стороне php.. тогда это будет на 100% точным. Поскольку все символы base64 принимаются в URLEncoding.

Или, если вы очень ленивы и все еще хотите использовать UrlEncoder, вы можете заменить каждый NUL байтом 0, что да, добавит много дополнительной обработки без всякой причины.

Но опять же, вы всегда можете загрузить данные, используя multipart/form-data, так как это требует гораздо больше работы.

Я бы порекомендовал быстрое исправление, а пока попробуйте трюк с кодировкой base64.

person SSpoke    schedule 05.08.2011