2016-04-05 3 views
0

Ich versuche, Bild in Google Cloud Storage in meiner App zu laden. Ich habe eine funktionierende Web-Lösung, so dass ich alle Inforamtionen der Anfrage sehen kann. Hier ist die Raw Anfrage Web-Lösung von ArbeitsWie uplaod Bild zu Google Cloud Storage in Android?

POST /_ah/upload/AMmfu6YbDgVL5B8ZYIBs9VQcZElIKyvHBOG0g-Y3PDsBiVgQLFZNKdzmV-G9gYF3e9SnFUNWCOSP6KDgO5f9bAxkDyNiMeY5EzXW9uWK9ULqXoQostoWySSQkKSzbizJbmjOH1x6mHOkYyWe3kKCn_84qpc1UhUNkw/ALBNUaYAAAAAVwOltAcWY8y-iHPujyHYUBbhmQlwJyi-/ HTTP/1.1 
Host: taxi2deal.appspot.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0 
Accept: */* 
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
X-Requested-With: XMLHttpRequest 
Referer: http://taxi2deal.appspot.com/ 
Content-Length: 2718 
Content-Type: multipart/form-data; boundary=---------------------------5607231118094935911642858770 
Connection: keep-alive 

-----------------------------5607231118094935911642858770 
Content-Disposition: form-data; name="myFile[]"; filename="ic_uploadphoto.png" 
Content-Type: image/png 

�PNG 


IHDR*$�ɨ+tEXtSoftwareAdobe ImageReadyq�e<(iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c067 79.157747, 2015/03/30-23:40:42  "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)" xmpMM:InstanceID="xmp.iid:3B13B96FF1F811E599F4BCD9FCA860E7" xmpMM:DocumentID="xmp.did:3B13B970F1F811E599F4BCD9FCA860E7"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:3B13B96DF1F811E599F4BCD9FCA860E7" stRef:documentID="xmp.did:3B13B96EF1F811E599F4BCD9FCA860E7"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>KB3�'IDATx��XkHW7�#h��k��V��i�D��BHZ��H�X�%�Ph� 
-----------------------------5607231118094935911642858770-- 

Durch die Art und Weise das ist mein Rohantwort

POST /_ah/upload/AMmfu6b-E_pSrXGteBOj-3LAyVfKs7h24BRJALESmv0km6cecTXCOQCU5r9r8nPszlGtM3zEbyKMcElhP219WqYKYeQCfy6lpOkifBB9HsBiQEOjP10kJyBXyTAQA9P3oWcGjMltZrFgjwAc5vP6g08ssDcj-mvzWw/ALBNUaYAAAAAVwOo2tdzrOgOCiGMq-Gjy7yuyKL063r2/ HTTP/1.1 
Content-Type: multipart/form-data; boundary=69ea02ab-ac17-49a7-9a8b-8be58caf9f61 
Content-Length: 66726 
Host: 6.taxi2deal.appspot.com 
Connection: Keep-Alive 
Accept-Encoding: gzip 
User-Agent: okhttp/2.3.0 

--69ea02ab-ac17-49a7-9a8b-8be58caf9f61 
Content-Disposition: form-data; name="photo"; filename="call_taxi1459857026278.png" 
Content-Type: image/* 
Content-Length: 66474 
Content-Transfer-Encoding: binary 

Diese meine Anfrage API ist Retrofit mit

@Multipart 
    @POST("/_ah/upload/{key}") 
    void imageUpload(@EncodedPath("key") String key,@Part("photo") TypedFile photoFile,Callback<List<ImageUploadResponse>> callback); 

Und das ist anfordern Implementierung

TypedFile photoTypedFile = new TypedFile("image/*", imageFileName); 
        TypedString name = new TypedString("testName"); 


        service.imageUpload(key, photoTypedFile, new Callback<List<ImageUploadResponse>>() { 
         @Override 
         public void success(List<ImageUploadResponse> imageUploadResponses, Response response) { 
          Log.d("SignUpActivity", "Status Code = " + response.getStatus()); 
          Log.d("SignUpActivity", "response = " + new Gson().toJson(response)); 
          if (response.getStatus() < 400) { 
           // request successful (status code 200, 201) 
           ImageUploadResponse result = imageUploadResponses.get(0); 
           Log.d("SignUpActivity", "response = " + new Gson().toJson(result)); 
           Toast.makeText(getApplicationContext(), result.imageUrl, Toast.LENGTH_SHORT).show(); 
           Log.d("SignUpActivity", "ImagUrl = " + result.imageUrl); 
          } 
         } 

         @Override 
         public void failure(RetrofitError error) { 
          Log.d("SignUpActivity", error.toString()); 
         } 
        }); 

Antwort

0

Also, das Problem war, dass ich trotz 200er Antwort einen leeren Body bekam. Nach ein paar Stunden, die ich bemerkt, dass ich spezielle name in Körper

Content-Disposition: form-data; name="news_file"; filename="news.txt"\r\n 

Vor diesem nehmen müssen, benutzte ich zufälligen Namen, es war Test, abc usw. ABER. Dieser Name ist der Name des Formulars. Daher sollte dies der Name des Formulars sein und nicht das, was Sie möchten. Hoffe, das hilft jemandem.

In android sollte das so aussehen. Ich benutze Nachrüstung.

@Multipart 
    @POST("/_ah/upload/{key}") 
    void imageUpload(@EncodedPath("key") String key, @Part("news_file") TypedFile photoFile,Callback<List<ImageUploadResponse>> callback); 

Werfen Sie einen Blick, dass @Part die gleiche wie Name ist (z news_file)