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

Вернуть клиенту файл с сервера и перейти на страницу

08.02.2020, 10:38. Показов 4854. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Подскажите, пжлста, как можно реализовать (или где почитать) казалось бы простую задачу. Через форму на странице пользователь указывает пару файлов, по кнопке эти файлы грузятся на сервер, обрабатываются и (собственно отсюда и начинается вопрос) полученный результат нужно вернуть клиенту. Сейчас формируется файл и отдается клиенту, но тогда я не могу перейти на нужную мне страницу. А если перехожу на страницу, то файл клиенту приходит "битый". Хочется результат вернуть именно в виде файла, а не просто вывести на страницу и её отобразить.

Код, реализующий возврат файла, такой:
Go
1
2
3
4
5
6
7
8
9
10
11
func comprvps(w http.ResponseWriter, r *http.Request) {
       ...
 
    tempOutFile, err := os.Open(tempOut.Name())
    w.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    w.WriteHeader(http.StatusOK)
    io.Copy(w, tempOutFile)
    tempOutFile.Close()
       ...
}
Если поставить обработчик на эту функцию

Go
1
    mux.HandleFunc("/compvps", comprvps)
То файл отдается, но на страницу не переходит. А если просто вызвать эту функцию, то по выходу из неё переходит на нужную страницу, но файл возвращается битый.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2020, 10:38
Ответы с готовыми решениями:

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

Передать клиенту файл с сервера на JSP
Возможно ли клиенту отдать файл с сервера? Пробовал такое: <%@ page contentType='application/octet-stream Content-Disposition:...

Как передать файл от сервера клиенту?
Нужно организовать передачу файлов на основе TCP/IP. Как передать файл от сервера на клиент? Есть проект:

4
 Аватар для farex_
26 / 26 / 3
Регистрация: 19.11.2010
Сообщений: 242
14.02.2020, 17:25
Я советую вам выдохнуть и еще раз обдумать что вам нужно.
0
3 / 3 / 0
Регистрация: 01.12.2017
Сообщений: 13
14.02.2020, 17:39  [ТС]
Советую прочитать, а потом писать совет.

Что сложного я написал? Пользователь через форму грузит на сервер файл, файл на сервер обрабатывается, формируется ответный файл. Ответный файл отдается пользователю, а браузер переходит со страницы с формой загрузки файла на нужную мне.

Так понятнее?
0
 Аватар для farex_
26 / 26 / 3
Регистрация: 19.11.2010
Сообщений: 242
15.02.2020, 15:48
Итак)
Вы в своем коде не обрабатываете ошибки, что в Go очень важно.

C++
1
  tempOutFile, err := os.Open(tempOut.Name())
C++
1
io.Copy(w, tempOutFile)


Это что такое?:

C++
1
2
    w.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
а где defer:

C++
1
  tempOutFile.Close()

И да, где у вас в коде делаете редирект?
Почему я вам посоветовал выдохнуть?
потому что вы тут написали набор букв и из вашего вопроса, и примера приведенного кода видно, что вы явно не понимаете что вы пишете.
Изучите МАТ часть и не нужно грубить тем кто может вам помочь.
1
3 / 3 / 0
Регистрация: 01.12.2017
Сообщений: 13
15.02.2020, 19:58  [ТС]
Я обрабатываю ошибки, но посчитал, что нужно указать именно тот код, который нужен. А то, что вы не знаете, что означает w.Header().Add() и w.Header().Set() ясно говорит, что тема вам незнакома. Поэтому и редирект писать (к тому же я написал, что он не работает, но если хотите, то http.Redirect(w, r, "/site2", http.StatusFound)) смысла никакого.

Выдохнуть вы посоветовали, поскольку тема вам незнакома, но хочется показать свою значимость. Пример моего кода показывает, что я делаю и что у меня не работает. Матчасть более-менее в порядке и кроме вас никто не жаловался. А про помочь не надо -- даже конструктивных вопросов не было -- только пафос и надувание щек.

Всего хорошего. Пойду на другие форумы, где не пучит людей от собственного величия.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2020, 19:58
Помогаю со студенческими работами здесь

Загрузить файл от сервера к клиенту без участия клиента
Podskajite, pojaluista, kak download file from server to client bez uchastia klienta (bez otkriti'ia okna 'save or open'). Prichiom fail...

файл-implementation, который объявляет функции сервера доступные клиенту
Доброе время суток, человеки! подскажите пожалуйста начинающему!!! пишу клиент-сервер приложение. там как я понял нуна создать...

Как за один раз начать скачивать файл и перейти на другую страницу
хочу по нажатию на кнопку передавать клиенту файл и переходить на другую страницу. Это сделать не получается потому что, я отправляю...

Socket(вернуть строку клиенту)
Товарищи!!! Подскажите пожалуйста, как нормально вернуть сообщение клиенту? Сделал вот так: while ((Serv = accept(Serv,0,0)) !=...

Заменить один текстовый файл на другой при отсутствии пинга до сервера и вернуть все обратно при его появлении
Добрый день. Нужно заменить один текстовый файл на другой при отсутствии пинга до сервера и вернуть все обратно при восстановлении пинга....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru