Перейти к содержимому
  • 0
Arseniy10

Загрузка файлов

Вопрос

При загрузке файла с GitHub через Internet Lib (из самого мода) загружает только последние 55 строк.

Если обращаться к карте, как к компоненту, то загружает определенное кол-во символов.

 

Как избавиться от этого ограничения? (если оно есть)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Вот так нужно использовать, кстати, либу из OpenOS.

local inet = require("internet")
 
local function request(url)
  local result = ""
  for chunk in inet.request(url) do
    result = result .. chunk
  end
  return result
end

@Arseniy10, ты в случае с либой код не указал. Поэтому нет смысла умничать стараться.

И вообще не хами тут. Окей? Мне не платят за то, что я тебе отвечаю, поэтому уважение проявляй хоть немного.

Изменено пользователем Fingercomp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, не знаю, дашь вызываемый код? Ссылку на страницу? Тут же нет телепатов...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, не знаю, дашь вызываемый код? Ссылку на страницу? Тут же нет телепатов...

Ну раз ты так просишь и не знаешь, есть ли ограничения, то:

function request(url)
	for k,v in pairs(net.request(url)) do --вызвано, как компонент
		if k == "read" then
			value = v()
		end
	end
	return value
end

function write(path,value,mode)
	mode = mode or "w"
	local file = io.open(path,"w")
	file:write(value)
	file:flush()
	file:close()
end

if t["name"] == args[2] then
	write(t["path"],request(rep_URL..t["path"]),"a")
else

--сама ссылка:
--https://raw.githubusercontent.com/Good-Pudge/OpenComputers/master/lib/bit_palette.lua

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Ну раз ты так просишь и не знаешь, есть ли ограничения, то:

....

Используй библиотеку internet.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Давайте перепишем это безумие.

local function request(url)
  return net.request(url).read()
end

local function write(path, value)
  local file = io.open(path, "w")
  file:write(value)
  file:flush()
  file:close()
end

if t.name == args[2] then
  write(t.path, request(rep_URL .. t.path))
end

Отбрасывая в сторону вопрос о том, почему бы просто не использовать библиотеку OpenOS, теперь отвечаю. read() за раз возвращает не весь ответ. Только его часть. Поэтому-то у тебя и не качает полностью.

Поэтому тебе нужно получать кусочки всего буфера сокета, пока не вернётся nil.

 

То есть, так:

local function request(url)
  local result = ""
  while true do
    local chunk = net.request(url).read()
    if not chunk then break end
    result = result .. chunk
  end
  return result
end

local function write(path, value)
  local file = io.open(path, "w")
  file:write(value)
  file:flush()
  file:close()
end

if t.name == args[2] then
  write(t.path, request(rep_URL .. t.path))
end

Но, на самом деле, ты теперь рискуешь уйти в бесконечный цикл при обрыве соединения. Поэтому ты должен использовать библиотеку OpenOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Используй библиотеку internet

Ты читал весь вопрос? Написал же, тогда загружает последние 55 строк

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Ну раз ты так просишь и не знаешь, есть ли ограничения, то:

...

Тем более read возращает чанк, а не целый ответ, нужно вызывать read пока nil не выпадет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...