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

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

0 голосов
/ 03 августа 2011

Это то, что имеет локальный файл .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();
}

1 Ответ

0 голосов
/ 05 августа 2011

Я просто догадываюсь здесь

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

NUL null character %00

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

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

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

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

...