api-put-object-file-context.go (1992B)
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/v7/pkg/s3utils" 27 ) 28 29 // FPutObject - Create an object in a bucket, with contents from file at filePath. Allows request cancellation. 30 func (c *Client) FPutObject(ctx context.Context, bucketName, objectName, filePath string, opts PutObjectOptions) (info UploadInfo, err error) { 31 // Input validation. 32 if err := s3utils.CheckValidBucketName(bucketName); err != nil { 33 return UploadInfo{}, err 34 } 35 if err := s3utils.CheckValidObjectName(objectName); err != nil { 36 return UploadInfo{}, 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 UploadInfo{}, err 44 } 45 defer fileReader.Close() 46 47 // Save the file stat. 48 fileStat, err := fileReader.Stat() 49 if err != nil { 50 return UploadInfo{}, 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.PutObject(ctx, bucketName, objectName, fileReader, fileSize, opts) 64 }