2017-08-06 21 views
8

अपलोड सर्वर पर छवि अपलोड करने के लिए निम्न कोड का उपयोग करना -एंड्रॉयड छवि एडब्ल्यूएस सर्वर

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<String>() { 
     @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(); 
     } 
     }; 

कौन सा छवि ठीक अपलोड करने लेकिन फाइल

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

में शरीर हेडर को जोड़े रहा है, तो मैं से है कि विशेष सामग्री को हटा दें फ़ाइल, छवि आसानी से पीएनजी के रूप में इस्तेमाल किया जा सकता है। क्या सर्वर पर केवल पीएनजी फ़ाइल भाग अपलोड करने का कोई तरीका है?

+0

अमेज़न एसडीके हस्तांतरण उपयोगिता – g7pro

उत्तर

2

मुझे एक ही समस्या है जिसे एडब्ल्यूएस सर्वर पर छवि अपलोड करने का प्रयास किया गया है। मैंने इसे ऑक्टेट-स्ट्रीम के रूप में भेजा है। मैंने रेट्रोफिट 2.2 का उपयोग किया है। नोट: अगर हम ऑक्टेट-स्ट्रीम का उपयोग करते हैं तो इसे मल्टीपार्ट अनुरोध के रूप में बनाने की आवश्यकता नहीं है।

@PUT 
Observable<Response<Void>> 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); 
} 

धन्यवाद आशा है कि यह आप में मदद मिलेगी।

+0

का उपयोग कर मुझे पता है कि 'Retrofit' में यह करने के लिए प्रयास करें, लेकिन मुद्दा यह है कि इस परियोजना का उपयोग कर' Volley' –

+0

मैं तुम्हें multipart.So उपयोग कर रहे हैं देखा है विकसित किया गया था, यह हो सकता है दूसरा रास्ता ही वॉली में भी। – Saveen

+0

यह मुद्दा है, मुझे अन्य तरीका नहीं मिल रहा है। चूंकि पूरा ऐप वॉली में लिखा गया है, इसलिए अब लाइब्रेरी को बदल नहीं सकता है –

संबंधित मुद्दे