开发者

Java uploading .png to server using php POST data

This is the method I have in my java application. It is reading the bytes correctly, I have logged to see if it was. The problem is that the php is not realizing the data is there. I have tested and the .php reads that $_POST is set, but is empty.

 public void screenshot(BufferedImage screenshot) {
    try {
        ImageIO.write(screenshot, "png",
                new File(Environment.getStorageDirectory().toString()
                        .concat(File.separator + SCRIPT_NAME + ".png")));

        HttpURLConnection httpUrlConnection;
        OutputStream outputStream;
        BufferedInputStream fileInputStream;
        BufferedReader serverReader;
        int totalBytes;
        String response = "";
        String serverResponse = "";
        String localFileName = Environment.getStorageDirectory().toString()
                .concat(File.separator + SCRIPT_NAME + ".png");

        // Establish a connection
        httpUrlConnection = (HttpURLConnection) new URL(
                "http://www.scripted.it/scriptoptions/utils/saveScreenshot.php?user="
                        + SupraCrafter.statHandler.getUser())
                .openConnection();
        httpUrlConnection.setDoOutput(true);
        httpUrlConnection.setDoInput(true);
        httpUrlConnection.setRequestMethod("POST");
        httpUrlConnection.setRequestProperty("Content-type",
                "application/x-www-form-urlencoded");
        outputStream = httpUrlConnection.getOutputStream();

        // Buffered input stream
        fileInputStream = new BufferedInputStream(new FileInputStream(
                localFileName));

        // Get the size of the image
        totalBytes = fileInputStream.available();

        // Loop through the files data
        for (int i = 0; i < totalBytes; i++) {
            // Write the data to the output stream
            outputStream.write(fileInputStream.read());
        }

        // Close the output stream
        outputStream.close();

        // New reader to get server response
        serverReader = new BufferedReader(new InputStreamReader(
                httpUrlConnection.getInputStream()));

        // Read the servers response
        serverResponse = "";
        while ((response = serverReader.readLine()) != null) {
            serverResponse = serverResponse + response;
        }

        System.out.println(serverResponse);

        // Close the buffered reader
        serverReader.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        URL url = new URL(
                "http://scripted.it/scriptoptions/utils/setScreenshotStatus.php?user="
                        + SupraCrafter.statHandler.getUser() + "&pass="
                        + SupraCrafter.statHandler.getPass() + "&script="
                        + SCRIPT_NAME + "&status=1");
        BufferedReader in = new BufferedReader(new InputStreamReader(
                url.openStream()));
        in.close();
    } catch (MalformedURLException e) {
    } catch (IOException e) {
    }
}

Here is the .php file:

 <?
 // Config
 $uploadBase = "../screenshots/";
 $uploadFilename = $_GET['user'] . ".png";
 $uploadPath = $uploadBase . $uploadFilename;
开发者_高级运维
 // Upload directory
 if(!is_dir($uploadBase))
mkdir($uploadBase);

 // Grab the data
 $incomingData = file_get_contents('php://input');

 // Valid data?
 if(!$incomingData)
die("No input data");

 // Write to disk
 $fh = fopen($uploadPath, 'w') or die("Error opening file");
 fwrite($fh, $incomingData) or die("Error writing to file");
 fclose($fh) or die("Error closing file");

 echo "Success";
 ?>

It always echos 'no input data.'


You are not encoding the content with application/x-www-form-urlencoded. You should not simply copy the bytes into the HTTP payload, but instead encode it correctly.

application/x-www-form-urlencoded is not the only possible way of encoding it, multipart/form-data is another common choice. Both are supported by almost all webservers, and as a consequence by PHP.

A tutorial on how to encode using Java is here : http://www.devx.com/Java/Article/17679

Why don't you use Apache's HttpClient or similar library that already do that tedious work for you?

Apache HttpClient : http://hc.apache.org/httpcomponents-client-ga/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜