将一个jpeg图像发布到PHP服务器:文件已保存但未被识别为jpeg图像

时间:2015-12-31 12:52:44

标签: php android jpeg httpurlconnection

我有以下代码将jpeg文件发布到服务器。问题:文件保存在服务器中,但不被视为jpeg图像。我知道,因为我已经运行了$ file foobar.jpg,而我只是得到了foobar.jpg: data。如果文件是有效的jpeg图像,则该命令将显示如下内容:foobar.jpg: JPEG image data, EXIF standard。此外,当我尝试使用GIMP打开图像时,我收到错误。

        //FileInputStream fis = null;
        FileInputStream fileInputStream = new FileInputStream(new File(attachmentFileName));


        url = new URL("*****");

        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setReadTimeout(10000 /* milliseconds */);
        urlConnection.setConnectTimeout(15000 /* milliseconds */);

        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);

        //urlConnection.setRequestMethod("GET");
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Connection", "Keep-Alive");
        urlConnection.setRequestProperty("Cache-Control", "no-cache");
        urlConnection.setRequestProperty(
                "Content-Type", "multipart/form-data;boundary=" + this.boundary);
                //"Content-Type", "image/jpeg");


        DataOutputStream outputStream = new DataOutputStream(urlConnection.getOutputStream());
        String first = this.twoHyphens + this.boundary + this.crlf;
        String second = "Content-Disposition: form-data; " +
                "name=\"foobar\";" +
                "filename=\"" + attachmentFileName + "\"" +
                "\"\r\n" +
                "Content-type: image/jpeg" +
                "\"\r\n" +
                "Content-Transfer-Encoding: 8bit" +
                "\"\r\n";
        //DATAOUTPUTSTREAM - DATAOUTPUTSTREAM - DATAOUTPUTSTREAM
        DataOutputStream request = new DataOutputStream(urlConnection.getOutputStream());
        request.writeBytes(first); //"--*****\r\n"
        request.writeBytes(second);


        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("\r\n");
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens + "\r\n");

        //Log.d(outputStream);

        // Responses from the server (code and message)
        int serverResponseCode = urlConnection.getResponseCode();
        String serverResponseMessage = urlConnection.getResponseMessage();

        System.out.println(serverResponseCode+serverResponseMessage);

        InputStream is = null;
        try {
            is = urlConnection.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }


        String contentAsString;

        // Convert the InputStream into a string
        try {
            contentAsString = readIt(is, len);

        } catch (IOException e) {
            e.printStackTrace();
        }

        fileInputStream.close();
        outputStream.flush();
        outputStream.close();
        urlConnection.disconnect();

这是PHP服务器上的代码:

  $_FILES['foobar'];
  move_uploaded_file($_FILES['foobar']['tmp_name'], 'images/foobar.jpg');


    var_dump($_FILES['foobar']);

    var_dump(move_uploaded_file($_FILES['foobar']['tmp_name'], 'images/jander.jpg'));

这是

的值
--*****
Content-Disposition: form-data; name="foobar";filename="/mnt/sdcard/Pictures/UltimateCameraGuideApp/IMG_20151228_141433.jpg""
Content-type: image/jpeg"
Content-Transfer-Encoding: 8bit"
����)CExif����MM��*����������������\������n��������\�������������������&������������.(�����������������������������i������������6�%���������������� HTC����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������HTC One S����������������������������������������������������������������������������������������������������������������������������������������������������������������������������H������������H���������'����������l���������������0220�������������̐������������������������  �����������������
�����������������������0100�������������������������������������������������������������������2015:12:28 14:14:33��2015:12:28 14:14:33������k������d������������R98������������0100������������������������������������������������n������������v(��������������������������~������������&���������������H������������H���������������      

 $.' ",#(7),01444'9=82<.342     

(等等......)

上传文件后,这是contentString变量的值,:

array(5) {
  ["name"]=>
  string(23) "IMG_20151228_141433.jpg"
  ["type"]=>
  string(11) "image/jpeg""
  ["tmp_name"]=>
  string(14) "/tmp/phpIztN2z"
  ["error"]=>
  int(0)
  ["size"]=>
  int(239136)
}

0 个答案:

没有答案