github.com/minio/minio-go/v6@v6.0.57/api-put-object-file-context.go (about)

     1  /*
     2   * MinIO Go Library for Amazon S3 Compatible Cloud Storage
     3   * Copyright 2017 MinIO, Inc.
     4   *
     5   * Licensed under the Apache License, Version 2.0 (the "License");
     6   * you may not use this file except in compliance with the License.
     7   * You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  
    18  package minio
    19  
    20  import (
    21  	"context"
    22  	"mime"
    23  	"os"
    24  	"path/filepath"
    25  
    26  	"github.com/minio/minio-go/v6/pkg/s3utils"
    27  )
    28  
    29  // FPutObjectWithContext - Create an object in a bucket, with contents from file at filePath. Allows request cancellation.
    30  func (c Client) FPutObjectWithContext(ctx context.Context, bucketName, objectName, filePath string, opts PutObjectOptions) (n int64, err error) {
    31  	// Input validation.
    32  	if err := s3utils.CheckValidBucketName(bucketName); err != nil {
    33  		return 0, err
    34  	}
    35  	if err := s3utils.CheckValidObjectName(objectName); err != nil {
    36  		return 0, err
    37  	}
    38  
    39  	// Open the referenced file.
    40  	fileReader, err := os.Open(filePath)
    41  	// If any error fail quickly here.
    42  	if err != nil {
    43  		return 0, err
    44  	}
    45  	defer fileReader.Close()
    46  
    47  	// Save the file stat.
    48  	fileStat, err := fileReader.Stat()
    49  	if err != nil {
    50  		return 0, err
    51  	}
    52  
    53  	// Save the file size.
    54  	fileSize := fileStat.Size()
    55  
    56  	// Set contentType based on filepath extension if not given or default
    57  	// value of "application/octet-stream" if the extension has no associated type.
    58  	if opts.ContentType == "" {
    59  		if opts.ContentType = mime.TypeByExtension(filepath.Ext(filePath)); opts.ContentType == "" {
    60  			opts.ContentType = "application/octet-stream"
    61  		}
    62  	}
    63  	return c.PutObjectWithContext(ctx, bucketName, objectName, fileReader, fileSize, opts)
    64  }