curl_close($ch);
 
       $result_array = json_decode($result, true);
-      if ($result_array && $result_array['id'] && $result_array['key']) {
-
+      if (!$result_array) {
+        $this->errors->add($i18n->get('error.file_storage'));
+      }
+      else if ($result_array['error']) {
+        // Add an error from file storage facility if we have it.
+        $this->errors->add($result_array['error']);
+      }
+      else if ($result_array['id'] && $result_array['key']) {
         $this->site_id = $result_array['id'];
         $this->site_key = $result_array['key'];
 
         $this->errors->add($i18n->get('error.file_storage'));
       }
     } else {
-      // Site id found, need to update site attributes.
+      // Site id found.
       $this->site_id = $val['id'];
 
       // Obtain site key.
 
   // putFile - puts uploaded file in remote storage.
   function putFile($fields) {
-    // if (!$this->site_id || !$this->site_key) return false;
-
     global $i18n;
     global $user;
     $mdb2 = getConnection();
     $fields = array('site_id' => urlencode($this->site_id),
       'site_key' => urlencode($this->site_key),
       'org_id' => urlencode($org_id),
-      //'org_key' => urlencode($this->org_key),     // TODO: obtain this properly.
+      'org_key' => urlencode($this->getOrgKey()),
       'group_id' => urlencode($group_id),
-      //'group_key' => urlencode($this->group_key), // TODO: obtain this properly.
-      //'user_id' => urlencode($this->user_id),     // TODO: obtain this properly.
-      //'user_key' => urlencode($this->user_key),   // TODO: obtain this properly.
+      'group_key' => urlencode($this->getGroupKey()),
+      'user_id' => urlencode($fields['user_id']),   // May be null.
+      'user_key' => urlencode($fields['user_key']), // May be null.
       'file_name' => urlencode($fields['file_name']),
       'description' => urlencode($fields['description']),
-      // TODO: add file content here, too. Will this work for large files?
-      //
+      'content' => urlencode(file_get_contents($_FILES['newfile']['tmp_name']))
     );
 
     // url-ify the data for the POST.
     $result_array = json_decode($result, true);
     $file_id = (int) $result_array['file_id'];
     $file_key = $result_array['file_key'];
-    $file_error = $result_array['file_error'];
+    $error = $result_array['error'];
 
     if (!$file_id || !$file_key) {
-      if ($file_error) {
+      if ($error) {
         // Add an error from file storage facility if we have it.
-        $this->errors->add($file_error);
+        $this->errors->add($error);
       }
       return false;
     }
     $affected = $mdb2->exec($sql);
     return (!is_a($affected, 'PEAR_Error'));
   }
+
+  // getOrgKey obtains organization key from the database.
+  private function getOrgKey() {
+    global $user;
+    $mdb2 = getConnection();
+
+    $org_id = $user->org_id;
+    $sql = "select group_key from tt_groups where id = $org_id and status = 1";
+    $res = $mdb2->query($sql);
+    $val = $res->fetchRow();
+    return $val['group_key'];
+  }
+
+  // getGrtoupKey obtains group key from the database.
+  private function getGroupKey() {
+    global $user;
+    $mdb2 = getConnection();
+
+    $group_id = $user->getGroup();
+    $org_id = $user->org_id;
+
+    $sql = "select group_key from tt_groups where id = $group_id and org_id = $org_id and status = 1";
+    $res = $mdb2->query($sql);
+    $val = $res->fetchRow();
+    return $val['group_key'];
+  }
 }