einfache HttpURLConnection POST-Datei multipart/form-Daten von android auf google blobstore

Habe ich sehr wenig Ahnung wie html funktioniert.Was ich tun möchte, ist genau ähnlich der folgenden aber auf android

HTML:

<body>
    <form action="<%= some_url %>" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile">
        <input type="submit" value="Submit">
    </form>
</body>

Habe ich versucht den folgenden code -

private static void postToUrl(String url_to_upload_on,
        String file_name_with_ext, byte[] byteArray) {

    String attachmentName = "file";
    String attachmentFileName = file_name_with_ext;
    String crlf = "\r\n";
    String twoHyphens = "--";
    String boundary =  "*****";

    try{

    URL url = new URL(url_to_upload_on);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");

    connection.setRequestProperty(
        "Content-Type", "multipart/form-data;boundary=" + boundary);
    DataOutputStream request = new DataOutputStream(
            connection.getOutputStream()); 
    request.writeBytes(twoHyphens + boundary + crlf);
    request.writeBytes("Content-Disposition: form-data; name=\"" +
        attachmentName + "\";filename=\"" + 
        attachmentFileName + "\"" + crlf);
    request.writeBytes(crlf);
    request.write(byteArray);
    request.writeBytes(crlf);
    request.writeBytes(twoHyphens + boundary + 
        twoHyphens + crlf);
    request.flush();
    request.close();

    }catch(Exception e){
        e.printStackTrace();
    }


}

das gibt mir kein direkter Fehler, aber Wann bekomme ich den error-stream-mit-

 Log.w(TAG, "connection.getErrorStream() = " +      connection.getErrorStream());

bekomme ich diese-

12-14 18:25:54.911: W/uploadToBlobStore(30558): httpUrlConnection.getErrorStream() = com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream@426dd5a8

ohne Erfolg.

PS - ich bin das hochladen von Dateien zu google blobstore

PS - ich kann nicht mit Apache http Bibliotheken oder seine multipart-Klasse als android sagt seiner abgeschrieben

BEARBEITEN 1

Nun bin ich mit dem folgenden code, aber es funktioniert nur für Dateien, die weniger als 2.3 Mb -

private static void postToUrl3(String url_to_upload_on,
        String file_name_with_ext, byte[] byteArray, String mimeType) {

    CloseableHttpClient httpClient = null;

    try {

        httpClient = HttpClientBuilder.create().build();

        HttpPost postRequest = new HttpPost(url_to_upload_on);


        MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();
        reqEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);            
        ByteArrayBody bab = new ByteArrayBody(byteArray, file_name_with_ext);           
        reqEntity.addPart("file", bab);         
        postRequest.setEntity(reqEntity.build());


        httpClient.execute(postRequest);//takes time

    } catch (Exception e) {
        Log.w("uploadToBlobStore", "postToUrl Exception e = " + e);
        e.printStackTrace();
    } finally {
        if (httpClient != null) {
            Log.w("uploadToBlobStore", "connection.closing ");
            try {
                httpClient.close();
            } catch (IOException e) {
                Log.w("uploadToBlobStore", "connection.closing errot e = "
                        + e);
                e.printStackTrace();
            }
        }
    }
}

wie machen es die Arbeit mit größeren Dateien?

PS- ich bin das senden es zu blobstore und ich habe eingestellt das maxUploadSizeBytesund MaxUploadSizeBytesPerBlob zu 30MB.Ich bin nicht in der Lage, herauszufinden, das Problem mit der Größe, weil google blobstore-Dokumentation sagt -

Google App Engine enthält die Blobstore-Dienst, der es Anwendungen ermöglicht, dienen die Daten Objekte, die nur begrenzt durch die Menge an Daten, die hochgeladen oder heruntergeladen werden über eine einzige HTTP-Verbindung.

So kann es ein problem mit http-Verbindung? und wenn ja, wie kann ich es konfigurieren.

  • Ich war in der Lage, eine Datei hochzuladen, mit multiPartEntity, check out den code, den ich gepostet in die Antwort hier: stackoverflow.com/questions/34222980/... Tick grün, wenn es funktioniert! prost!
Schreibe einen Kommentar