Sample code for 30+ languages & platforms
Tcl

Facebook Upload Photo from Local File

See more Facebook Examples

Uploads a new photo with a caption from a local file.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

# This example assumes Chilkat HTTP to have been previously unlocked.
# See Global Unlock Sample for sample code.

set http [new_CkHttp]

set req [new_CkHttpRequest]

CkHttpRequest_put_HttpVerb $req "POST"
CkHttpRequest_put_ContentType $req "multipart/form-data"
CkHttpRequest_put_Path $req "/v2.7/me/photos"

# Use the previously obtained access token.
# Note: The publish_actions scope is required to upload a photo.
CkHttpRequest_AddHeader $req "Authorization" "Bearer FACEBOOK-ACCESS-TOKEN"

# Send an "Expect: 100-continue" header in the request.
# This causes the HTTP server to end a 100-continue response
# immediately after receiving the HTTP header.  The client
# (Chilkat) will receive this intermediate response, and if
# it's not an error response, it knows that the HTTP server will
# accept the data that is forthcoming.
# The alternative is to get an error response after trying to upload
# the entire contents of the files.
CkHttpRequest_AddHeader $req "Expect" "100-continue"

# Set a photo caption.
CkHttpRequest_AddParam $req "caption" "Here are some penguins!"

# Additional parameters can be added to the request by 
# calling AddParam once per parameter.  
# See https://developers.facebook.com/docs/graph-api/reference/user/photos
# for more information about other optional parameters.

# Indicate the local file to be uploaded.
set success [CkHttpRequest_AddFileForUpload $req "source" "qa_data/jpg/penguins2.jpg"]
if {$success == 0} then {
    puts [CkHttpRequest_lastErrorText $req]
    delete_CkHttp $http
    delete_CkHttpRequest $req
    exit
}

# Upload the image file..
set resp [new_CkHttpResponse]

set success [CkHttp_HttpSReq $http "graph.facebook.com" 443 1 $req $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkHttpRequest $req
    delete_CkHttpResponse $resp
    exit
}

# Examine the response body:
set responseJson [CkHttpResponse_bodyStr $resp]
puts "$responseJson"

# The response contains JSON, such as this:
# {"id":"10210224963435862","post_id":"10224048320139890_10210224963435862"}

delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkHttpResponse $resp