[Java] Bild hochladen, Direkt-Link zurück

02/01/2014 17:05 Chicken17#1
Hey,

möchte ein Programm schreiben in dem es möglich ist eine Datei (Bild) an einen Server zu schicken und dann den Link dazu zurück bekommen.

Kennt jemand eine relativ einfache Methode wie ich so etwas realisieren könnte, bzw gibt es einen Hoster wo man Bilder mithilfe einer Java API hochladen kann?

Das ganze sollte ohne Anmeldung funktionieren! Quasi will ich den Vorgang beim Bild hochladen auf epvpimg.com (wenn das hier gehen würde wäre das noch besser) mit einem Programm machen.
02/01/2014 23:56 Zunft#2
Ich glaube das ist am einfachsten für dich: [Only registered and activated users can see links. Click Here To Register...]
02/02/2014 00:22 Chicken17#3
Wenn ichs richtig verstanden hab braucht da jeder Benutzer aber einen Account und kann das dann in seinen Account laden oder?:)

Eigentlich hab ich so eine API bereits für die Dropbox und das funktioniert einwandfrei bloß mein Problem ist,dass man bei Dropbox für freigegebene Bilder entweder bloß einen temporären Direktlink erstellen kann oder einen Link der für immer hält aber leider kein direktlink ist und somit kann man das Bild nicht auf elitepvpers oder sonst wo einbinden.

Falls sich jemand mit der dropbox core API auskennt und es da doch ne Möglichkeit gibt bitte melden :)
02/02/2014 00:53 Zunft#4
Quote:
Originally Posted by Chicken17 View Post
Wenn ichs richtig verstanden hab braucht da jeder Benutzer aber einen Account und kann das dann in seinen Account laden oder?:)
Nein, ich glaube nicht. Jeder Client muss lediglich einen Token beantragen.

Quote:
Originally Posted by Chicken17 View Post
Eigentlich hab ich so eine API bereits für die Dropbox und das funktioniert einwandfrei bloß mein Problem ist,dass man bei Dropbox für freigegebene Bilder entweder bloß einen temporären Direktlink erstellen kann oder einen Link der für immer hält aber leider kein direktlink ist und somit kann man das Bild nicht auf elitepvpers oder sonst wo einbinden.
Wie wäre es, wenn du anstatt die Bilder freizugeben, diese in den "Public" Ordner legst ?
02/02/2014 01:34 Chicken17#5
Quote:
Originally Posted by Zunft View Post
Nein, ich glaube nicht. Jeder Client muss lediglich einen Token beantragen.



Wie wäre es, wenn du anstatt die Bilder freizugeben, diese in den "Public" Ordner legst ?
Achso,schaue mir das morgen mal an:) Ist die API auch für Java, weil ich habe so auf die schnelle nix dazu gefunden?

Die App lädt die Bilder automatisch in einen Order der den Namen der App hat, ist von Dropbox und der API her so:)
02/02/2014 11:09 XxharCs#6
Ich hab zwar sowas noch nie gemacht bzw. gebraucht (dementsprechend kenn ich mich nicht wirkllich da aus :P), sollte aber über die POST-Methodik funktionieren.

Hab da ein Beispiel im Netz gefunden:
[Only registered and activated users can see links. Click Here To Register...]
02/14/2014 17:19 Chicken17#7
Suche immernoch :)
Das bei imgur könnte so etwas sein! Jedoch finde ich da nirgends ein Java Beispiel :(
02/14/2014 17:58 Zunft#8
Code:
public void post(String path) {


    List<NameValuePair> postContent = new ArrayList<NameValuePair>(2);  
    postContent.add(new BasicNameValuePair("key", DEV_KEY));  
    postContent.add(new BasicNameValuePair("image", path));


    String url = "http://imgur.com/api/upload.xml";
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpPost httpPost = new HttpPost(url);

    try {
        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        for(int index=0; index < postContent.size(); index++) {
            if(postContent.get(index).getName().equalsIgnoreCase("image")) {
                // If the key equals to "image", we use FileBody to transfer the data
                entity.addPart(postContent.get(index).getName(), new FileBody(new File (postContent.get(index).getValue())));
            } else {
                // Normal string data
                entity.addPart(postContent.get(index).getName(), new StringBody(postContent.get(index).getValue()));
            }
        }

        httpPost.setEntity(entity);

        HttpResponse response = httpClient.execute(httpPost, localContext);
        mImgurResponse = parseResponse (response);


        Iterator it = mImgurResponse.entrySet().iterator();
        while(it.hasNext()){
            HashMap.Entry pairs = (HashMap.Entry)it.next();

            Log.i("INFO",pairs.getKey().toString());
            if(pairs.getValue()!=null){
                reviewEdit.setText(pairs.getValue().toString());

            Log.i("INFO",pairs.getValue().toString());
            }
        }


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

private Map<String,String> parseResponse(HttpResponse response) {
        String xmlResponse = null;

        try {
            xmlResponse = EntityUtils.toString(response.getEntity());
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (xmlResponse == null) return null;

        HashMap<String, String> ret = new HashMap<String, String>();
        ret.put("error", getXMLElementValue(xmlResponse, "error_msg"));
        ret.put("delete", getXMLElementValue(xmlResponse, "delete_page"));
        ret.put("original", getXMLElementValue(xmlResponse, "original_image"));

        return ret;
    }

private String getXMLElementValue(String xml, String elementName) {
        if (xml.indexOf(elementName) >= 0)
            return xml.substring(xml.indexOf(elementName) + elementName.length() + 1, 
                    xml.lastIndexOf(elementName) - 2);
        else
            return null;
    }
Gibt doch genug Beispiele:

[Only registered and activated users can see links. Click Here To Register...]
02/14/2014 22:31 Chicken17#9
Das funktioniert leider alles nicht mehr, da die API (imgur v3) jetzt über OAuth funktioniert und für diese neue Funktion gibt es nirgends Beispiele für Java und um mir das alles selbst zusammenzubauen fehlt mir leider das nötige Wissen bzw. die Anleitung.