Как вызвать функцию после успеха - PullRequest
0 голосов
/ 07 августа 2020

Я хочу вызвать функцию (os.Remove) после успешной загрузки файла.

Я пытаюсь создать конечную точку для одноразовой загрузки файла, которая удаляет файл сразу после загрузки.

Могу ли я вызвать функцию сразу после w.Write(data)? Что делать, если загрузка не удалась?

Мой обработчик выглядит примерно так:

func oneTimeFileDownloadHandler(w http.ResponseWriter, r *http.Request) {
    filename, mimetype, data := getFile(r)
    w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment;filename="%s"`, filename))
    w.Header().Set("Content-Type", mimetype)
    if _, err := w.Write(data); err != nil {
        http.Error(w, fmt.Sprintf("error writing download data: %s", err), http.StatusInternalServerError)
        return
    }
    os.Remove(filename)
}

1 Ответ

0 голосов
/ 07 августа 2020

Кажется, ваша функция продолжается после ошибки, поэтому, если http.Error не запускает c, ваш файл будет удален, даже если загрузка не удалась.

Чтобы исправить это, вам нужно вернуть функцию формы сразу после звонок http.Error.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...