Форум программистов, компьютерный форум, киберфорум
Наши страницы

Go

Войти
Регистрация
Восстановить пароль
 
DrankUser
0 / 2 / 2
Регистрация: 29.01.2017
Сообщений: 83
Завершенные тесты: 2
#1

Написал простенький файловый сервер, ошибка при загрузке файлов - Язык Go

28.12.2017, 22:52. Просмотров 158. Ответов 6

По-быстрому с целью ознакомления написал небольшой файловый сервер
Из handle функции, если путь соответствует регулярному выражению, передаю его вот в эту функцию
Код
func (s *ServerRouter) loadFile(path string) {
	ext := path[strings.LastIndex(path, ".")+1:]
	var contentType string
	switch strings.ToLower(ext) {
	case "js":
		contentType = "text/javascript"
	case "css":
		contentType = "text/css"
	case "html", "htm", "gohtml":
		contentType = "text/html"
	case "jpeg", "jpg":
		contentType = "image/jpeg"
	case "png":
		contentType = "image/png"
	case "bm", "bmp":
		contentType = "image/bmp"
	default:
		s.notFound()
	}

	f, err := os.Open("public/" + path)
	defer f.Close()

	if err != nil {
		s.notFound()
	}

	s.Writer.Header().Add("Content-Type", contentType)

	buf := bufio.NewReader(f)

	buf.WriteTo(s.Writer)
}
ServerRouter просто обёртка для http.Request и ResponseWriter

Но это не суть, сервер то работает, файлы выгружает, даже web-страничку неплохую можно получить.

Проблема выявилась чуть позже, причём очень странная

Иногда, при обновлении страницы, вместо нормальных правильных css и js файлов приходят поломанные, у css файла не стоит Content-Type, а всё содержимое js файла засунуто в конец css, бывает что некоторые файлы обрезаются и прочие неприятные вещи.

Сервер запускал во время тестов на локалхосте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2017, 22:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написал простенький файловый сервер, ошибка при загрузке файлов (Язык Go):

Ошибка при загрузке файлов на сервер - DLE
Появилась такая проблема, загружаю файл на сервер и в конце загрузки мне выдаёт вот это: После закрываю окно загрузки, открываю...

Собираем простенький файловый сервер - Серверы
На данном компьютере будет располагаться база данных 1С, в которой будут работать 4-5 пользователей. Никаких RAID массивов. Конфигурацию...

Server 2008 Файловый сервер. Ошибка с перезаписью файлов - Windows Server
День добрый. Система: Windows server 2008 r2.На файловом сервере начались проблемы. Дизайнеры работают в Indesign cs5 и делают экспорт в...

При загрузке файлов на сервер у всех файлов пустой ContentLength - C# MVC
Подскажите, пожалуйста, с чем может быть связана следующая проблема. Есть страница состоящая из нескольких шагов (блоки скрываются и...

При множественной загрузке файлов на сервер загружается лишь один. - PHP
доброе время суток. такая ситуация: загружаю несколько файлов через <input type="file" multiple />, отправляю на сервер, но туда приходит...

Ошибка при загрузке dt файлов - 1С
Добрый, ошибка при загрузке dt файлов что может быть?

6
NoMasters
Псевдослучайный
1766 / 1108 / 74
Регистрация: 13.09.2011
Сообщений: 3,153
29.12.2017, 09:08 #2
Остро не хватает досрочных выходов из функции при ошибках. И закрывать тоже нечего, если os.Open() прошла неудачно.
0
DrankUser
0 / 2 / 2
Регистрация: 29.01.2017
Сообщений: 83
Завершенные тесты: 2
29.12.2017, 18:43  [ТС] #3
NoMasters, с файловым потоком уже начал баловаться после обнаружения проблемы. До этого был простой ReadFile и результат тот же

С ошибками поработаю, но всё же это что-то очень странное поведение.

Добавлено через 9 минут
Код
http: multiple response.WriteHeader calls
Вот такое сообщение пишет сервер при работе.
Ещё пару раз вылетало
Код
fatal error: concurrent map writes
0
Dmitriy_M
1371 / 1254 / 114
Регистрация: 20.03.2009
Сообщений: 4,477
Записей в блоге: 11
05.01.2018, 17:43 #4
DrankUser, ты пытаешься работать так, как будто сервер однопоточный.
C
1
2
3
4
5
    s.Writer.Header().Add("Content-Type", contentType)
 
    buf := bufio.NewReader(f)
 
    buf.WriteTo(s.Writer)
Это не прокатит в многопоточном окружении.
1
DrankUser
0 / 2 / 2
Регистрация: 29.01.2017
Сообщений: 83
Завершенные тесты: 2
05.01.2018, 17:45  [ТС] #5
Dmitriy_M, ага, хорошо, а как тогда написать это вот многопоточно?
0
Dmitriy_M
1371 / 1254 / 114
Регистрация: 20.03.2009
Сообщений: 4,477
Записей в блоге: 11
05.01.2018, 19:37 #6
не использовать глобальные и общие данные
0
DrankUser
0 / 2 / 2
Регистрация: 29.01.2017
Сообщений: 83
Завершенные тесты: 2
05.01.2018, 22:36  [ТС] #7
Dmitriy_M, товарищ, в самом деле, я же знаю что такое параллельное программирование, я имею ввиду вот эту конкретную ситуацию с запуском файлового потока.

Ну да ладно, вы мне и так уже помогли, дальше Гугл и документация
0
05.01.2018, 22:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2018, 22:36
Привет! Вот еще темы с ответами:

Upload to OneDrive: ошибка 404 при загрузке файла на сервер - C#
День добрый. На сервере OneDrive (Microsoft) имеется некий файл. Этот файл открыт для общего доступа, для чтения и редактирования. ...

Ошибка (503) при загрузке с Ftp файлов - C#
Здравствуйте, есть задача загрузить все файлы, находящиеся в определённой папке на ftp. Получаю список файлов на сервере в...

Загрузка файлов: ошибка кодировки при загрузке - PHP
Здравствуйте. Подскажите, как исправить ошибку с загрузкой файлов. Если имя файла указано русскими буквами, при загрузке сбивается на...

При загрузке файла на ftp-сервер - ошибка 553 (не могу создать файл) - Ubuntu Linux
Здравствуйте товарищи, я пытаюсь загрузить файл через ftp на свой сервер, пишет мне ошибку 553 Could not create file.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.