Android图片上传AWS Server

使用以下代码在服务器上上传图像 –

final InputStream fileInputStream = MyApplication.getInstance().getContentResolver().openInputStream(imageFile); bitmap = BitmapFactory.decodeStream(fileInputStream); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); final byte[] bitmapData = byteArrayOutputStream.toByteArray(); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); // Add binary body if (bitmap != null) { ContentType contentType = ContentType.create("image/png"); builder.addBinaryBody("", bitmapData, contentType, ""); final HttpEntity httpEntity = builder.build(); StringRequest request = new StringRequest(Request.Method.PUT, url, new Response.Listener() { @Override public void onResponse(String response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override public byte[] getBody() throws AuthFailureError { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { httpEntity.writeTo(bos); } catch (IOException e) { VolleyLog.e("IOException writing to ByteArrayOutputStream"); } return bos.toByteArray(); } }; 

哪个上传图片很好,但在文件中添加了body标头

 --0Iw7PkPg_BhQghFGBR1_lBhO1RaCaBsZJ-U Content-Disposition: form-data; name=""; filename="" Content-Type: image/png âPNG .... --0Iw7PkPg_BhQghFGBR1_lBhO1RaCaBsZJ-U-- 

如果我从文件中删除该特定内容,则该图像可以很容易地用作PNG。 有没有办法只将PNG文件部分上传到服务器?

我有同样的问题试图将图像上传到AWS服务器。 我把它作为一个八位字节流发送。 我用过改造2.2。 注意 :如果我们使用Octet-stream,则无需将其作为Multipart请求。

 @PUT Observable> uploadMedia( @Header("Content-Type") String contentType, @Header("filetype") String FileType, @Url String urlPath, @Body RequestBody picture); private void UploadSignedPicture(String url, File filename, String mediaUrl) { mAmazonRestService.uploadMedia("application/octet-stream", "application/octet-stream", url, mAppUtils.requestBody(filename)). subscribeOn(mNewThread). observeOn(mMainThread). subscribe(authenticateResponse -> { if (this.isViewAttached()) { if (authenticateResponse.code() == ApiConstants.SUCCESS_CODE) else } }, throwable -> { if (isViewAttached()) getMvpView().showServerError(this, throwable); } }); } 

最重要的是如何创建请求:

 @NonNull public RequestBody requestBody(File filename) { InputStream in = null; byte[] buf = new byte[0]; try { in = new FileInputStream(new File(filename.getPath())); buf = new byte[in.available()]; while (in.read(buf) != -1) ; } catch (IOException e) { e.printStackTrace(); } return RequestBody .create(MediaType.parse("application/octet-stream"), buf); } 

谢谢希望这会对你有所帮助。