Мой сервер go получает массив JS по почтовому запросу, получая такие данные
Как записать это в файл?
В node.js я могу сделать это так:
fs.writeFile(`${dir}/${body.file_name}`, Buffer.from(body.file), { flag: "w" }, function (err) {
if (err) {
console.info(err);
return res.status(200).json({ 'status': 'error' });
}
console.info(`file sucessfully saved to "${dir}${body.file_name}"`);
return res.status(200).json({ 'status': 'ok' });
});





Перевод строки за строкой на go приведет к чему-то вроде этого:
func handleIncommingFile() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Body == nil {
log.Println("body is empty")
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(`{ 'status': 'error' }`))
return
}
body, err := io.ReadAll(r.Body)
if err != nil {
log.Printf("reading body: %v", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(`{ 'status': 'error' }`))
return
}
defer r.Body.Close()
if err := os.WriteFile("path/to/filename.ext", body, 0644); err != nil {
log.Printf("writting content: %v", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(`{ 'status': 'error' }`))
return
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{ 'status': 'ok' }`))
}
}
Обратите внимание, что я возвращаю другой код состояния HTTP в зависимости от контекста ошибки и что отсутствуют проверки, например, если файл уже существует.
Также я бы рекомендовал внедрить в обработчик службу хранения, чтобы упростить его и перенести логику создания файла в другой пакет.
func handleIncommingFile(store storage.Manager) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if err := store.Save(r.Body); err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}
w.WriteHeader(http.StatusOK)
// ...
Это поможет вам протестировать тесты Tandler и Storage :)
В соответствии с Как задать вопрос , пожалуйста, не публикуйте изображения кода, данных, сообщений об ошибках и т. д. . Вместо этого скопируйте или введите текст в свой вопрос, в формате кода. Зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга; то, что невозможно точно описать текстом.