无效的图像POST请求JAVA

时间:2017-05-11 07:14:23

标签: java php post

我尝试使用POST请求上传图像文件,并从服务器获取以下响应:

Notice: Undefined index: width in /home/api.webbankir.com/methods/photo.php on line 32

Notice: Undefined index: width in /home/api.webbankir.com/methods/photo.php on line 37

Notice: Undefined index: height in /home/api.webbankir.com/methods/photo.php on line 32

Notice: Undefined index: height in /home/api.webbankir.com/methods/photo.php on line 37

Fatal error: Uncaught exception 'Exception' with message 'Invalid image: 
/home/api.webbankir.com/tmp/d9864480da25e440ff4d591498881e79.jpg' in 
/home/api.webbankir.com/include/Simpleimage.php:1081
Stack trace:#0 /home/api.webbankir.com/include/Simpleimage.php(512): SimpleImage->get_meta_data()
#1/home/api.webbankir.com/methods/photo.php(97): SimpleImage-
>load('/home/api.webba...')
#2 /home/api.webbankir.com/methods/photo.php(411): Photo->load(Array)
#3 {main}thrown in /home/api.webbankir.com/include/Simpleimage.php on line 1081

这是我的JAVA代码:

HttpURLConnection connection = null;
DataOutputStream outputStream = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary =  "*****";

int  bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1024 * 1024;

try {

   connection = null;
    URL url = new URL(url_link);
   connection = (HttpURLConnection) url.openConnection();

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

   connection.setRequestMethod("POST");

   connection.setRequestProperty("Connection", "Keep-Alive");
   connection.setRequestProperty("ENCTYPE", "multipart/form-data");
   connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
   connection.setRequestProperty("file", "img_webbankir.jpeg");

   outputStream = new DataOutputStream( connection.getOutputStream() );
   outputStream.writeBytes(twoHyphens + boundary + lineEnd);
   outputStream.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + "img_webbankir.jpeg" +"\""  + lineEnd);    /* img_webbankir.jpeg */
   outputStream.writeBytes(lineEnd);

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

int dimension = Math.min(bitmap.getWidth(), bitmap.getHeight());
bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
b = baos.toByteArray();
imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
outputStream.writeBytes(imageEncoded);
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// Responses from the server (code and message)

int serverResponseCode = connection.getResponseCode();
String serverResponseMessage = connection.getResponseMessage();
Log.e("log", "response code = " + serverResponseCode);
Log.e("log", "response message = " + serverResponseMessage);

outputStream.flush();
outputStream.close();
Log.e("log", "out put stream closed");


BufferedReader bufferedReader = new BufferedReader(new 
InputStreamReader(connection.getInputStream()));
String line = "";
StringBuilder stringBuilder = new StringBuilder();

while ((line = bufferedReader.readLine()) != null) {
     stringBuilder.append(line).append("\n");
     }
bufferedReader.close();
response = stringBuilder.toString();
connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
            Log.e("Log", "error " + e);
        }

我已经使用OkHttp尝试了相同的请求,但得到了相同的响应...... 我也尝试过不同的位图编码方法......

将不胜感激求助

1 个答案:

答案 0 :(得分:0)

您的客户端是Java,但错误消息来自PHP。因此,这是服务器问题。或者您没有正确使用服务器API。您是在与第三方,文档化API或您自己的PHP服务器集成吗?

如果使用您自己的服务器,则可以调试该问题。 如果我们使用了第三方API,您应该检查他们的文档。

PS 对于java rest客户端,有比HttpURLConnection更好,更高级别的工具。考虑使用spring的https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

https://github.com/square/okhttphttp://square.github.io/retrofit/也是不错的选择。您的客户端代码将更短(2-5行,而不是70),您将在更高的抽象级别上工作。

要重现此问题,请使用Postman等工具重现相同的帖子请求。 https://www.getpostman.com/ 这将排除你的java代码中bug的可能性。