# File lib/s3/right_s3_interface.rb, line 458
    def store_object(params)
      AwsUtils.allow_only([:bucket, :key, :data, :headers, :md5], params)
      AwsUtils.mandatory_arguments([:bucket, :key, :data], params)
      params[:headers] = {} unless params[:headers]
          
      params[:data].binmode if(params[:data].respond_to?(:binmode)) # On Windows, if someone opens a file in text mode, we must reset it to binary mode for streaming to work properly
      if (params[:data].respond_to?(:lstat) && params[:data].lstat.size >= USE_100_CONTINUE_PUT_SIZE) ||
         (params[:data].respond_to?(:size)  && params[:data].size       >= USE_100_CONTINUE_PUT_SIZE)
        params[:headers]['expect'] = '100-continue'
      end
      
      req_hash = generate_rest_request('PUT', params[:headers].merge(:url=>"#{params[:bucket]}/#{CGI::escape params[:key]}", :data=>params[:data]))
      resp = request_info(req_hash, S3HttpResponseHeadParser.new)
      if(params[:md5])
        resp[:verified_md5] = (resp['etag'].gsub(/\"/, '') == params[:md5]) ? true : false
      else
        resp[:verified_md5] = false
      end
      resp
    rescue
      on_exception
    end