从PHP转移到Java时数据不完整

时间:2015-01-21 10:11:03

标签: java php bufferedreader

尝试从php向java发送长字符串(Base64编码图像)时,只传递了一小部分数据。当我在localhost apache服务器上测试应用程序时,字符串被完全发送并且应用程序正常工作。但是当我将代码迁移到外部服务器时,只有一小部分数据是在Java中接收的。当我在浏览器中输出数据时,长字符串会正确显示。

这是我用来发送数据的代码:

//get the data from mysql result
while($row = mysqli_fetch_assoc($result))
{
    // get the fotopath
    $fotoRow = mysqli_fetch_array ( $fotoResult, MYSQL_NUM );
    $foto = $fotoRow[0];

    //replace backslashes
    $fotoFormatted = $foto; //str_replace($backslash, $slash, $foto);

    //get the picture data
    $im = file_get_contents("http://www.mywebsite.com" . $fotoFormatted, true);

    //encode the picture data
    $imdata = base64_encode($im);

    //add the encoded string to the data array
    $row ['foto'] = $imdata;
    $output[] = $row;
}

//output the data as a json array
print(json_encode($output))

这是我用来接收数据的代码:

//get the url to the script to connect with
String link = "http://mywebsite/script.php";

//get the data to send to the script
String data = URLEncoder.encode("userid", "UTF-8") + "="
                + URLEncoder.encode(userid, "UTF-8");

//make a new HttpURLConnection
URL url = new URL(link);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);

//make a new OutputStreamWriter with the HttpURLConnection
OutputStreamWriter wr = new OutputStreamWriter(
                   conn.getOutputStream());

//write the data and flush the remaining data
wr.write(data);
wr.flush();

//make a new BufferedReader with the given connection
BufferedReader reader = new BufferedReader(new InputStreamReader(
               conn.getInputStream()));

//define variables
JSONArray jsonArray = null;
String line = null;

//read the data from the server     
while ((line = reader.readLine()) != null) {
        jsonArray = new JSONArray(line);
        }

//disconnect the connection
conn.disconnect();

//return the data for further use
return jsonArray;

我的问题是:为什么来自外部服务器的数据不完整,而从本地服务器收到的数据已经完成,我该怎么做才能解决这个问题。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,问题是空间被包含在一些文件的路径中(我认为设计非常糟糕),因为这样一个404页面被编码在base64中,这样就添加了不正确的数据。在我的本地服务器应用程序中,我没有配置404页面,所以它只返回null,我有一个回退来处理这种情况。 我用%20替换了所有空格,错误已解决。