code: func (d *driver) Writer(ctx context.Context, path string, append bool) (storagedriver.FileWriter, error) {
  	key := d.s3Path(path)
  	if !append {
  		// TODO (brianbland): cancel other uploads at this path
  		resp, err := d.S3.CreateMultipartUpload(&s3.CreateMultipartUploadInput{
  			Bucket:               aws.String(d.Bucket),
  			Key:                  aws.String(key),
  			ContentType:          d.getContentType(),
  			ACL:                  d.getACL(),
  			ServerSideEncryption: d.getEncryptionMode(),
  			SSEKMSKeyId:          d.getSSEKMSKeyID(),
  			StorageClass:         d.getStorageClass(),
  		})
  		if err != nil {
  			return nil, err
  		}
  		return d.newWriter(key, *resp.UploadId, nil), nil
  	}
  	resp, err := d.S3.ListMultipartUploads(&s3.ListMultipartUploadsInput{
  		Bucket: aws.String(d.Bucket),
  		Prefix: aws.String(key),
  	})
  	if err != nil {
  		return nil, parseError(path, err)
  	}
  
  	for _, multi := range resp.Uploads {
  		if key != *multi.Key {
  			continue
  		}
  		resp, err := d.S3.ListParts(&s3.ListPartsInput{
  			Bucket:   aws.String(d.Bucket),
  			Key:      aws.String(key),
  			UploadId: multi.UploadId,
  		})
  		if err != nil {
  			return nil, parseError(path, err)
  		}
  		var multiSize int64
  		for _, part := range resp.Parts {
  			multiSize += *part.Size
  		}
  		return d.newWriter(key, *multi.UploadId, resp.Parts), nil
  	}
  	return nil, storagedriver.PathNotFoundError{Path: path}
  }
docs: // Writer returns a FileWriter which will store the content written to it
  // at the location designated by "path" after the call to Commit.