code: public PutObjectResponse putObject(PutObjectRequest request) {
          checkNotNull(request, "request should not be null.");
          assertStringNotNullOrEmpty(request.getKey(), "object key should not be null or empty");
  
          InternalRequest internalRequest = this.createRequest(request, HttpMethodName.PUT);
  
          BosResponse response = uploadObject(request, internalRequest);
          PutObjectResponse result = new PutObjectResponse();
          result.setETag(response.getMetadata().getETag());
  
          return result;
      }
docs: Uploads a new object to the specified Bos bucket. The <code>PutObjectRequest</code> contains all the
  details of the request, including the bucket to upload to, the key the object will be uploaded under,
  and the file or input stream containing the data to upload.
  
  @param request The request object containing all the parameters to upload a new object to Bos.
  @return A PutObjectResponse object containing the information returned by Bos for the newly created object.