Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 5

Передача файла методом POST

22.04.2020, 07:48. Показов 6817. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте столкнулся с такой задачей.
Надо передать серверу методом POST с помощью, допустим curl видео/аудио файла и получить:
- Название аудио/видео кодека (при наличии)
- Разрешение изображения
- битрейт

Вот примерная передача:
curl -X POST http://localhost:4000/video -F file=@/home/hk/eden.mp4

ответ должен быть примерно таким

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "video":{
    "name": "h264",
    "width": 640,
    "height": 360,
    "bitRate": 862304,
    "duration": "5.1261111s"
  },
  "audio": {
    "name": "aac",
    "bitRate": 119402,
    "duration": "5.311999999s"
  }
}

Вот типа создал сервер:

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
 
import (
    "fmt"
    "net/http"
)
 
func main()  {
    http.HandleFunc("/video", handler1)
    http.ListenAndServe("localhost:4000", nil)
 
}
func handler1(w http.ResponseWriter, r *http.Request) {
    r.ParseMultipartForm(1024)
    fmt.Println(w, r.MultipartForm.File)
    //r.ParseForm()
    //fmt.Println(w, r.PostForm)
}
Вот мне надо как то вытащить из этого файла атрибуты.
с Go столкнулся впервые на днях. Синтаксис вроде начинаю понимать, На полноценное обучение времени нет, конечно буду изучать, но с этим вопросом мне надо разобраться именно сейчас. Может у кого есть код, который решал примерную задачу, или подскажите в каком направлении смотреть.
Я буду очень благодарен

Добавлено через 19 минут
Кстати, получаю примерно такую портянку в ответе:

&{0xc00010cb40 0xc00016e000 0xc0000284c0 0x4c29a0 false true false false 0xc000028540 {0xc0001400e0 map[] false false} map[] false 0 -1 0 false false [] 0 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0] 0xc00001e0e0 0} map[file:[0xc000072460]]

И не знаю как ее обработать)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2020, 07:48
Ответы с готовыми решениями:

Передача файла на сервер методом POST
Потолок: .Net 4.0 Идея: передать файл методом POST на сервер скрипту. Что есть: public string ZAGPyZKA_FAiLA(string FAiL,...

Передача значений методом POST
Доброго времени суток! Если не трудно, прошу помочь решить следующую задачу. Имеются две страницы: index.php и page.php. На...

Передача переменной методом POST
Подскажите пожалуйста, как получить значение переменной на странице bat.php. : session_start(); if(!$_SESSION) { header...

10
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.04.2020, 09:01
вот так вы файл получите и сохраните, дальше - уже делайте, что хотите - извлекайте информацию о видео/аудио дорожках, пихайте в json и возвращайте.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
 
import (
    "fmt"
    "io/ioutil"
    "net/http"
)
 
func main() {
    http.HandleFunc("/video", handler1)
    http.ListenAndServe("localhost:4000", nil)
 
}
 
func check(e error) {
    if e != nil {
        panic(e)
    }
}
 
func handler1(w http.ResponseWriter, r *http.Request) {
    // parse data
    err := r.ParseMultipartForm(1024)
    check(err)
 
    // get 'file'
    file, handler, err := r.FormFile("file")
    check(err)
    defer file.Close()
 
    // read file bytes
    fileBytes, err := ioutil.ReadAll(file)
    check(err)
 
    // write bytes to a localfile
    err = ioutil.WriteFile(handler.Filename, fileBytes, 0644)
    check(err)
 
    fmt.Fprintf(w, "Success\n")
}
если будете возвращать json, хорошим тоном будет поставить соответствующий заголовок.

Go
1
w.Header().Set("Content-Type", "application/json")
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.04.2020, 09:04
я прогнал через media_info и вернул json:
1
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 5
22.04.2020, 11:05  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
я прогнал через media_info и вернул json:
А как из кода обратиться допустим к Имени файла? к полю имени, что бы его вывести
И вообще, как узнать сколько полей (ну или атрибутов), узнать их названия. Что бы по отдельности в консоль вывести, поэкспериментировать, что бы понять. Потом с JSON-ом я справлюсь)
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.04.2020, 13:31
Доброе утро.
В коде выше я обращался в атрибуту Filename.

Добавлено через 2 минуты
https://golang.org/pkg/mime/multipart/#FileHeader вот тут можно посмотреть структуру этого struct.
1
0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 5
22.04.2020, 13:45  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
В коде выше я обращался в атрибуту Filename.
Спасибо, Просто я Сишник, только на днях начал в Go погружаться) носом ткнули, я теперь понял)))
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.04.2020, 13:57
Всегда пожалуйста.

Добавлено через 11 минут
В ide тоже можно как правило посмотреть.
Не знаю, чем Вы пользуетесь, но для себя я бы прежде, чем лезть в документацию, наверное, посмотрел бы там.
0
 Аватар для freevoyajer
20 / 21 / 2
Регистрация: 09.04.2020
Сообщений: 125
27.04.2020, 23:20
Цитата Сообщение от Jabbson Посмотреть сообщение
В ide тоже можно как правило посмотреть
Для меня сейчас вопрос актуален. Любимый eclipse в go не умеет, вы наверняка используете jb?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
27.04.2020, 23:21
vscode
0
 Аватар для freevoyajer
20 / 21 / 2
Регистрация: 09.04.2020
Сообщений: 125
27.04.2020, 23:31
Jabbson, я какое-то время пользовался atom, пока он не стал дико тормозить. Рост workspace'ов, проектов его нагружает. Как с этим в vscode? Сколько полу/+активных проектов у вас в разработке и как это отражается на производительности?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
28.04.2020, 01:41
На вкус и цвет фломастеры разные, попробуйте, это не отнимет много времени.
Большая часть людей, которых я знаю, попробовав vscode, так на нем и остались.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2020, 01:41
Помогаю со студенческими работами здесь

Передача данных методом POST
Приветствую!! Есть две обычные формы, В первой есть текстовое поле: <form action="1.php method="post"...

Передача значений методом post
Здравствуйте, помогите пожалуйста Имеется скрипт оплаты: <form method="post"...

Передача методом Post из JS в PHP
Есть скрипт, выполняющийся при нажатии кнопки: function check(){ var name = document.getElementById('name'); var...

Передача переменной методом POST
Здравствуйте! Возник следующий вопрос: Имеется JavaScript-переменная, допустим Х1, её надо передать методом POST, чтобы в дальнейшем...

Передача из формы в БД методом POST
Всем привет! Ребят помогите никак понять не могу почему в строке где описана сама передача данных ошибка. в чем она заключается? САМА...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru