pondělí 22. října 2012

Upload souboru do Box.net v Grails

O víkendu jsem tvořil CMS a chtěl jsem vyzkoušet nějakou službu, kam bych mohl ukládat obrázky. Mezi službami jsem zkoušel i Box.net. Cílem bylo umožnit upload obrázku do mého osobního box.net (mám 50 GB místa a neuložil jsem tam zatím nic).

V dokumentaci box.net bylo něco takového:

curl https://www.box.com/api/2.0/files/content \ -H "Authorization: BoxAuth api_key=API_KEY&auth_token=AUTH_TOKEN" \ -F filename=@FILE_NAME \ -F folder_id=FOLDER_ID

Je to pomocí nástroje cURL. Jednoduše vysvětleno, pro upload je potřeba provést POST na adresu https://api.box.com/2.0/files/content spolu s hlavičkou Authorization, kde uvedete nějaké ty tokeny, a dva formulářové elementy filename a folder_id + uploadovaný soubor.

private String sendHttps(String httpUrl, byte[] data, String filename) {

        HttpClient httpclient = new DefaultHttpClient()
        httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1)
        HttpPost httppost = new HttpPost(httpUrl)

        Map headers = ["Authorization": "BoxAuth api_key=${apiKey}&auth_token=${authToken}"]  // hlavička s autorizačními údaji
        headers.each {k, v ->
            httppost.addHeader(k, v)
        }

        MultipartEntity mpEntity = new MultipartEntity()  // pro POST formuláře s přílohou
        ContentBody cbFile = new ByteArrayBody(data, filename)
        mpEntity.addPart("filename", cbFile)  // tato část mi dělala největší potíže
        mpEntity.addPart("folder_id", new StringBody("445743883")) // ID složky na box.net
        httppost.setEntity(mpEntity)
       
        HttpResponse response = httpclient.execute(httppost)
        HttpEntity resEntity = response.getEntity()
       
        httpclient.getConnectionManager().shutdown()
...
    }
Pro připojení jsem použil knihovnu Apache HttpComponents. Zkoušel jsem i nějaký plugin do Grails, ale u nich jsem měl problém vytvořit formulářový element spolu s tím souborem a poslat to celé.

Žádné komentáře:

Okomentovat