在服务器上上传图像

时间:2015-01-23 09:20:40

标签: android

您好我正在创建一个应用程序来上传服务器上的图像,我收到响应代码== 200但图像无法上传。 有任何关于此代码的建议我在此错过了什么。 我对PHP代码一无所知。

    HttpURLConnection connection = null;
        DataOutputStream outputStream = null;
        DataInputStream inputStream = null;
        String pathToOurFile = sourceFileUri;//"/data/file_to_send.jpg";
        String urlServer = "http://norefresh.thesparxitsolutions.com/apctest/index.php/login/updateImage";
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary =  "*****";          
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1*1024*1024;

        try
        {
            FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile) );

            URL url = new URL(urlServer);
            connection = (HttpURLConnection) url.openConnection();


            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setUseCaches(false);

            connection.setRequestMethod("POST");
            connection.setRequestProperty("Connection", "Keep-Alive");
            connection.setRequestProperty("User-Agent", "Android Multipart HTTP Client 1.0");
            connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

            outputStream = new DataOutputStream(connection.getOutputStream());
            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
            outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd);
            outputStream.writeBytes("Content-Type: application/octet-stream" + lineEnd);
            outputStream.writeBytes("Content-Type: image/jpeg" + lineEnd);
            outputStream.writeBytes("Content-Transfer-Encoding: binary" + lineEnd);
            outputStream.writeBytes(lineEnd);             


            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            buffer = new byte[bufferSize];

            // Read file
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

            while (bytesRead > 0)
            {
                outputStream.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
            }

            outputStream.writeBytes(lineEnd);
            outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

            // Responses from the server (code and message)
            serverResponseCode = connection.getResponseCode();

            String serverResponseMessage = connection.getResponseMessage();

            System.out.println("serverResponseCode  "+serverResponseCode+ "serverResponseMessage"+serverResponseMessage);

            if(serverResponseCode== 200)
            {
                dialog.dismiss();
            }
            fileInputStream.close();
            outputStream.flush();
            outputStream.close();
        }
        catch (Exception ex)
        {
            //Exception handling
        }

1 个答案:

答案 0 :(得分:1)

要将图像上传到服务器,您应该将图像文件转换为Base64。

private String encodeFileToBase64Binary(String fileName) throws IOException {

    // File file = new File(fileName);
    byte[] bytes = loadFile(Default_DIR);
    str = new StringBuilder(Base64.encodeToString(bytes, 0));
    // str = Base64.encodeToString(bytes, 0);
    encodedString = new String(str);

    return encodedString;
}