Search code examples
androidimageflickr

Upload image to Flickr and get URL of it


I want to send image message in my chat application so I'm planning to upload it to Flickr and get the static url from it, then I can send that url to other device (and save into the DB too).

I know the api of it is : https://up.flickr.com/services/upload/

But I dont know how to set parameter for it and save images also. Anyone have a solution for it?

This is my class about Upload Image Task:

public class UploadPhotoTask extends AsyncTask<OAuth, Void, String> {
    /**
     * 
     */
    private final FlickrjActivity flickrjAndroidSampleActivity;
    private File file;

    // private final Logger logger = LoggerFactory
    // .getLogger(UploadPhotoTask.class);

    public UploadPhotoTask(FlickrjActivity flickrjAndroidSampleActivity,
            File file) {
        this.flickrjAndroidSampleActivity = flickrjAndroidSampleActivity;
        this.file = file;
    }

    /**
     * The progress dialog before going to the browser.
     */
    private ProgressDialog mProgressDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = ProgressDialog.show(flickrjAndroidSampleActivity,
                "", "Uploading..."); //$NON-NLS-1$ //$NON-NLS-2$
        mProgressDialog.setCanceledOnTouchOutside(true);
        mProgressDialog.setCancelable(true);
        mProgressDialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dlg) {
                UploadPhotoTask.this.cancel(true);
            }
        });
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.os.AsyncTask#doInBackground(Params[])
     */
    @Override
    protected String doInBackground(OAuth... params) {
        OAuth oauth = params[0];
        OAuthToken token = oauth.getToken();

        try {
            Flickr f = FlickrHelper.getInstance().getFlickrAuthed(
                    token.getOauthToken(), token.getOauthTokenSecret());

            UploadMetaData uploadMetaData = new UploadMetaData();
            uploadMetaData.setTitle("" + file.getName());
            return f.getUploader().upload(file.getName(),
                    new FileInputStream(file), uploadMetaData);
        } catch (Exception e) {
            Log.e("boom!!", "" + e.toString());
            e.printStackTrace();
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
     */
    @Override
    protected void onPostExecute(String response) {
        if (mProgressDialog != null) {
            mProgressDialog.dismiss();
        }

        if (response != null) {
            Log.e("", "" + response);
        } else {

        }

        if (monUploadDone != null) {
            monUploadDone.onComplete();
        }

        Toast.makeText(flickrjAndroidSampleActivity.getApplicationContext(),
                response, Toast.LENGTH_SHORT).show();

    }

    onUploadDone monUploadDone;

    public void setOnUploadDone(onUploadDone monUploadDone) {
        this.monUploadDone = monUploadDone;
    }

    public interface onUploadDone {
        void onComplete();
    }

}

Besides, how can we get URL of that images?


Solution

  • Read the developer guide for details on how to use the api and working examples.

    Also there is this existing post with similar query.

    Try using the flickrj library as per that other post.