Android-Java HTTPCLIENT使用Content-Disposition发送HTTP参数进行图像上传

huangapple go评论113阅读模式
英文:

Android-Java HTTPCLIENT send http parameters with Content-Disposition image uploading

问题

  1. File file = new File(filepath);
  2. FileInputStream fileInputStream = new FileInputStream(file);
  3. URL url = new URL(UPLOAD_SERVER);
  4. connection = (HttpURLConnection) url.openConnection();
  5. connection.setDoInput(true);
  6. connection.setDoOutput(true);
  7. connection.setUseCaches(false);
  8. connection.setRequestMethod("POST");
  9. connection.setRequestProperty("Connection", "Keep-Alive");
  10. connection.setRequestProperty("User-Agent", "Android Multipart HTTP Client 1.0");
  11. connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
  12. outputStream = new DataOutputStream(connection.getOutputStream());
  13. outputStream.writeBytes("--" + boundary + "\r\n");
  14. outputStream.writeBytes("Content-Disposition: form-data; name=\"img_upload\"; filename=\"" + q[idx] + "\"\r\n");
  15. outputStream.writeBytes("Content-Type: image/jpeg\r\n");
  16. outputStream.writeBytes("Content-Transfer-Encoding: binary\r\n");
  17. outputStream.writeBytes("\r\n");
  18. bytesAvailable = fileInputStream.available();
  19. bufferSize = Math.min(bytesAvailable, 1048576);
  20. buffer = new byte[bufferSize];
  21. bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  22. while (bytesRead > 0) {
  23. outputStream.write(buffer, 0, bufferSize);
  24. bytesAvailable = fileInputStream.available();
  25. bufferSize = Math.min(bytesAvailable, 1048576);
  26. bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  27. }
  28. outputStream.writeBytes("\r\n");
  29. outputStream.writeBytes("--" + boundary + "--" + "\r\n");
  30. // Insert additional form parameter
  31. outputStream.writeBytes("--" + boundary + "\r\n");
  32. outputStream.writeBytes("Content-Disposition: form-data; name=\"description\"\r\n");
  33. outputStream.writeBytes("\r\n");
  34. outputStream.writeBytes("my image's description\r\n");
  35. outputStream.writeBytes("--" + boundary + "--" + "\r\n");
  36. inputStream = connection.getInputStream();
  37. int status = connection.getResponseCode();
  38. if (status == HttpURLConnection.HTTP_OK) {
  39. BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  40. String inputLine;
  41. StringBuffer response = new StringBuffer();
  42. while ((inputLine = in.readLine()) != null) {
  43. response.append(inputLine);
  44. }
  45. inputStream.close();
  46. connection.disconnect();
  47. fileInputStream.close();
  48. outputStream.flush();
  49. outputStream.close();
  50. return response.toString();
  51. } else {
  52. throw new Exception("Non ok response returned");
  53. }
英文:

I have a image uploader function in java using HttpClient and I'm using Content-Disposition for it.
But I'm stuck there I did not realize how can i insert another body form paramaters in this post request.
For example I want to add a paramaters like:

  1. description = "my image's description"

My Code :

  1. File file = new File(filepath);
  2. FileInputStream fileInputStream = new FileInputStream(file);
  3. URL url = new URL(UPLOAD_SERVER);
  4. connection = (HttpURLConnection) url.openConnection();
  5. connection.setDoInput(true);
  6. connection.setDoOutput(true);
  7. connection.setUseCaches(false);
  8. connection.setRequestMethod("POST");
  9. connection.setRequestProperty("Connection", "Keep-Alive");
  10. connection.setRequestProperty("User-Agent", "Android Multipart HTTP Client 1.0");
  11. connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
  12. outputStream = new DataOutputStream(connection.getOutputStream());
  13. outputStream.writeBytes("--" + boundary + "\r\n");
  14. outputStream.writeBytes("Content-Disposition: form-data; name=\"" + "img_upload" + "\"; filename=\"" + q[idx] +"\"" + "\r\n");
  15. outputStream.writeBytes("Content-Type: image/jpeg" + "\r\n");
  16. outputStream.writeBytes("Content-Transfer-Encoding: binary" + "\r\n");
  17. outputStream.writeBytes("\r\n");
  18. bytesAvailable = fileInputStream.available();
  19. bufferSize = Math.min(bytesAvailable, 1048576);
  20. buffer = new byte[bufferSize];
  21. bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  22. while(bytesRead > 0) {
  23. outputStream.write(buffer, 0, bufferSize);
  24. bytesAvailable = fileInputStream.available();
  25. bufferSize = Math.min(bytesAvailable, 1048576);
  26. bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  27. }
  28. outputStream.writeBytes("\r\n");
  29. outputStream.writeBytes("--" + boundary + "--" + "\r\n");
  30. inputStream = connection.getInputStream();
  31. int status = connection.getResponseCode();
  32. if (status == HttpURLConnection.HTTP_OK) {
  33. BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  34. String inputLine;
  35. StringBuffer response = new StringBuffer();
  36. while ((inputLine = in.readLine()) != null) {
  37. response.append(inputLine);
  38. }
  39. inputStream.close();
  40. connection.disconnect();
  41. fileInputStream.close();
  42. outputStream.flush();
  43. outputStream.close();
  44. return response.toString();
  45. } else {
  46. throw new Exception("Non ok response returned");
  47. }

答案1

得分: 0

我会尝试这样做:

  1. outputStream.writeBytes("--" + boundary + "\r\n");
  2. outputStream.writeBytes("Content-Disposition: form-data; name=\"img_upload\"; filename=\"" + q[idx] + "\"\r\n");
  3. outputStream.writeBytes("Content-Type: image/jpeg" + "\r\n");
  4. outputStream.writeBytes("Content-Transfer-Encoding: binary" + "\r\n");
  5. outputStream.writeBytes("--" + boundary + "\r\n");
  6. outputStream.writeBytes("Content-Disposition: form-data; name=\"description\"\r\n");
  7. outputStream.writeBytes("\r\n");
  8. outputStream.writeBytes(description);
  9. outputStream.writeBytes("--" + boundary + "\r\n");

注意:上述代码为翻译后的结果,已经将HTML实体编码(比如")还原为正常的字符。

英文:

I'd try doing this:

  1. outputStream.writeBytes("--" + boundary + "\r\n");
  2. outputStream.writeBytes("Content-Disposition: form-data; name=\"" + "img_upload" + "\"; filename=\"" + q[idx] +"\"" + "\r\n");
  3. outputStream.writeBytes("Content-Type: image/jpeg" + "\r\n");
  4. outputStream.writeBytes("Content-Transfer-Encoding: binary" + "\r\n");
  5. outputStream.writeBytes("--" + boundary + "\r\n");
  6. outputStream.writeBytes("Content-Disposition: form-data; name=\"" + "description" + "\"" + "\r\n");
  7. outputStream.writeBytes("\r\n");
  8. outputStream.writeBytes(description);
  9. outputStream.writeBytes("--" + boundary + "\r\n");

huangapple
  • 本文由 发表于 2020年4月4日 07:38:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/61021958.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定