title: Upload object to AWS S3 without creating a file using aws-sdk-go
body: <p>I am trying to upload an object to AWS S3 using golang sdk without needing to create a file in my system (trying to upload only the string). But I am having difficulties to accomplish that. Can anybody give me an example of how can I upload to AWS S3 without needing to create a file?</p>
  
  <p>AWS Example of how to upload a file:</p>
  
  <pre><code>// Creates a S3 Bucket in the region configured in the shared config
  // or AWS_REGION environment variable.
  //
  // Usage:
  //    go run s3_upload_object.go BUCKET_NAME FILENAME
  func main() {
      if len(os.Args) != 3 {
          exitErrorf("bucket and file name required\nUsage: %s bucket_name filename",
              os.Args[0])
      }
  
      bucket := os.Args[1]
      filename := os.Args[2]
  
      file, err := os.Open(filename)
      if err != nil {
          exitErrorf("Unable to open file %q, %v", err)
      }
  
      defer file.Close()
  
      // Initialize a session in us-west-2 that the SDK will use to load
      // credentials from the shared credentials file ~/.aws/credentials.
      sess, err := session.NewSession(&amp;aws.Config{
          Region: aws.String("us-west-2")},
      )
  
      // Setup the S3 Upload Manager. Also see the SDK doc for the Upload Manager
      // for more information on configuring part size, and concurrency.
      //
      // http://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#NewUploader
      uploader := s3manager.NewUploader(sess)
  
      // Upload the file's body to S3 bucket as an object with the key being the
      // same as the filename.
      _, err = uploader.Upload(&amp;s3manager.UploadInput{
          Bucket: aws.String(bucket),
  
          // Can also use the `filepath` standard library package to modify the
          // filename as need for an S3 object key. Such as turning absolute path
          // to a relative path.
          Key: aws.String(filename),
  
          // The file to be uploaded. io.ReadSeeker is preferred as the Uploader
          // will be able to optimize memory when uploading large content. io.Reader
          // is supported, but will require buffering of the reader's bytes for
          // each part.
          Body: file,
      })
      if err != nil {
          // Print the error and exit.
          exitErrorf("Unable to upload %q to %q, %v", filename, bucket, err)
      }
  
      fmt.Printf("Successfully uploaded %q to %q\n", filename, bucket)
  }
  </code></pre>
  
  <p>I already tried to create the file programmatically but it is creating the file on my system and then uploading it to S3.</p>