local url = ... local component = require("component") local fs = require("filesystem") if not component.list("internet")() then print("\27[91mThis program requires an internet card to run.\27[0m") return end if not url then print("Please enter a URL to download from.") require("shell").run("help download") return end if url:sub(-1, -1) == "/" then url = url:sub(1, -2) end local internet = component.internet local request, data, tmpdata = nil, "", nil local status, errorMessage = pcall(function() request = internet.request(url) request:finishConnect() end) if not status then print("\27[91mDownload failed: " .. errorMessage .. "\27[0m") end local responseCode = request:response() if responseCode and responseCode ~= 200 then print("\27[91mDownload failed: " .. tostring(responseCode) .. "\27[0m") end repeat tmpdata = request.read(math.huge) data = data .. (tmpdata or "") until not tmpdata local saveLocation local saveLocationOK = false repeat saveLocation = terminal.read(nil, "File save location: ", fs.concat(require("shell").getWorkingDirectory(), url:match("/([^/]+)$"))) if fs.isDirectory(saveLocation) then print("\27[91mThe specified location is a directory.\27[0m") elseif fs.exists(saveLocation) then local answer = terminal.read({prefix = "\27[91mThere is already a file at the specified directory. Overwrite it? [Y/n]\27[0m"}) if answer:lower() ~= "n" then saveLocationOK = true end else saveLocationOK = true end until saveLocationOK local handle = fs.open(saveLocation, "w") handle:write(data) handle:close() print("File downloaded successfully.")