diff --git a/drivers/139/driver.go b/drivers/139/driver.go
index b765b2ba..27d1e30c 100644
--- a/drivers/139/driver.go
+++ b/drivers/139/driver.go
@@ -83,8 +83,7 @@ func (d *Yun139) MakeDir(ctx context.Context, parentDir model.Obj, dirName strin
 		}
 		pathname = "/orchestration/familyCloud/cloudCatalog/v1.0/createCloudDoc"
 	}
-	_, err := d.post(pathname,
-		data, nil)
+	_, err := d.post(pathname, data, nil)
 	return err
 }
 
@@ -222,6 +221,22 @@ func (d *Yun139) Remove(ctx context.Context, obj model.Obj) error {
 	return err
 }
 
+const (
+	_  = iota //ignore first value by assigning to blank identifier
+	KB = 1 << (10 * iota)
+	MB
+	GB
+	TB
+)
+
+func getPartSize(size int64) int64 {
+	// 网盘对于分片数量存在上限
+	if size/GB > 30 {
+		return 512 * MB
+	}
+	return 100 * MB
+}
+
 func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {
 	data := base.Json{
 		"manualRename": 2,
@@ -267,17 +282,17 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
 	// Progress
 	p := driver.NewProgress(stream.GetSize(), up)
 
-	var Default int64 = 104857600
-	part := (stream.GetSize() + Default - 1) / Default
+	var partSize = getPartSize(stream.GetSize())
+	part := (stream.GetSize() + partSize - 1) / partSize
 	for i := int64(0); i < part; i++ {
 		if utils.IsCanceled(ctx) {
 			return ctx.Err()
 		}
 
-		start := i * Default
+		start := i * partSize
 		byteSize := stream.GetSize() - start
-		if byteSize > Default {
-			byteSize = Default
+		if byteSize > partSize {
+			byteSize = partSize
 		}
 
 		limitReader := io.LimitReader(stream, byteSize)
@@ -301,6 +316,11 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
 			return err
 		}
 		log.Debugf("%+v", res)
+
+		if res.StatusCode != http.StatusOK {
+			return fmt.Errorf("unexpected status code: %d", res.StatusCode)
+		}
+
 		res.Body.Close()
 	}