Как правильно обработать несколько запросов на загрузку файлов? - PullRequest
0 голосов
/ 03 мая 2018

Работа над проектом, который имеет много загрузки изображений. И каждое изображение будет изменено и уменьшено.

Сначала я попытался обработать загрузку всех изображений одним запросом, а когда я тестировал его на сервере, он выдал ошибку времени ожидания ответа.

Теперь я отправляю запрос на каждый загружаемый файл, и это, похоже, замедляет работу сервера.

У вас есть предложения для меня?

Мой код:

func SavePhotoWithBuffer(bigBuf, thumbBuf bytes.Buffer, bigSize, thumbSize int64, fileName, contentType string) {
    params := &s3.PutObjectInput{
        Bucket:        aws.String("bucket"),
        Key:           aws.String(fileName),
        Body:          bytes.NewReader(bigBuf.Bytes()),
        ACL:           aws.String("public-read"),
        ContentLength: aws.Int64(bigSize),
        ContentType:   aws.String(contentType),
    }
    thumbParams := &s3.PutObjectInput{
        Bucket:        aws.String("bucket"),
        Key:           aws.String("t_" + fileName),
        Body:          bytes.NewReader(thumbBuf.Bytes()),
        ACL:           aws.String("public-read"),
        ContentLength: aws.Int64(thumbSize),
        ContentType:   aws.String(contentType),
    }
    UploadWithParams(params, thumbParams)
}

//I've used github.com/patrickmn/go-cache package to cache the session.
func Open() *s3.S3 {
    var cachedData = cacheservice.GetCache("s3session")
    if cachedData == nil {
        var sess *s3.S3
        accessKey := "accessKey"
        secretKey := "secretKey"
        token := ""
        cred := credentials.NewStaticCredentials(accessKey, secretKey, token)
        _, err := cred.Get()
        if err != nil {
            fmt.Printf("bad credentials: %s", err)
        }
        conf := aws.NewConfig().WithRegion("eu-west-1").WithCredentials(cred)
        conf.Endpoint = aws.String("ams3.digitaloceanspaces.com")
        sess = s3.New(session.New(), conf)
        cacheservice.SetCache("s3session", sess)
        return sess
    }
    return cachedData.(*s3.S3)
}


func UploadWithParams(params, thumbParams *s3.PutObjectInput) {
    var se = Open()
    var err error
    _, err = se.PutObject(params)
    if err != nil {
        fmt.Printf("bad response: %s", err)
    }
    _, err = se.PutObject(thumbParams)
    if err != nil {
        fmt.Printf("bad response: %s", err)
    }
}
...