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

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

Вопрос

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

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

 

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

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


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

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

  • 0

Вот так нужно использовать, кстати, либу из 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

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


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

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

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


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

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

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

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

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


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

 

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

....

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

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

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


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

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

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.

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


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

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

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

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


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

 

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

...

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

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


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

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

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

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

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

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

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

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

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


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