func (bucket Bucket) UploadFile(objectKey, filePath string, partSize int64, options ...Option) error {
	if partSize < MinPartSize || partSize > MaxPartSize {
		return errors.New("oss: part size invalid range (100KB, 5GB]")
	}
	cpConf := getCpConfig(options)
	routines := getRoutines(options)
	if cpConf != nil && cpConf.IsEnable {
		cpFilePath := getUploadCpFilePath(cpConf, filePath, bucket.BucketName, objectKey)
		if cpFilePath != "" {
			return bucket.uploadFileWithCp(objectKey, filePath, partSize, options, cpFilePath, routines)
		}
	}
	return bucket.uploadFile(objectKey, filePath, partSize, options, routines)
}
UploadFile is multipart file upload.

objectKey    the object name.
filePath    the local file path to upload.
partSize    the part size in byte.
options    the options for uploading object.

error    it's nil if the operation succeeds, otherwise it's an error object.
package oss
import (
	"crypto/md5"
	"encoding/base64"
	"encoding/hex"
	"encoding/json"
	"errors"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"time"
)