diff --git a/i18n/english/luasrc/i18n/cbi.en.lua b/i18n/english/luasrc/i18n/cbi.en.lua
index 42f93d4ccb..14b184b9ed 100644
--- a/i18n/english/luasrc/i18n/cbi.en.lua
+++ b/i18n/english/luasrc/i18n/cbi.en.lua
@@ -1,5 +1,6 @@
cbi_add = 'Add entry'
cbi_del = 'Remove entry'
+cbi_replace = 'Replace entry'
cbi_invalid = 'Invalid input value'
cbi_invalid_section = 'Validation failed: Please check any input fields for mistakes.'
cbi_missing = 'This field is mandatory'
@@ -12,3 +13,4 @@ cbi_manual = '-- custom --'
cbi_select = '-- Please choose --'
cbi_gorel = 'Go to relevant configuration page'
cbi_applying = 'Applying changes'
+cbi_upload = 'Uploaded File'
diff --git a/i18n/english/luasrc/i18n/cbi.en.xml b/i18n/english/luasrc/i18n/cbi.en.xml
index 4766ad155f..c4843b1e72 100644
--- a/i18n/english/luasrc/i18n/cbi.en.xml
+++ b/i18n/english/luasrc/i18n/cbi.en.xml
@@ -4,6 +4,7 @@
Add entry
Remove entry
+Replace entry
Invalid input value
Validation failed: Please check any input fields for mistakes.
This field is mandatory
@@ -16,5 +17,6 @@
-- Please choose --
Go to relevant configuration page
Applying changes
+Uploaded File
diff --git a/i18n/german/luasrc/i18n/cbi.de.lua b/i18n/german/luasrc/i18n/cbi.de.lua
index 9e69075379..499805c6a9 100644
--- a/i18n/german/luasrc/i18n/cbi.de.lua
+++ b/i18n/german/luasrc/i18n/cbi.de.lua
@@ -1,5 +1,6 @@
cbi_add = 'Eintrag hinzufügen'
cbi_del = 'Eintrag entfernen'
+cbi_replace = 'Eintrag ersetzen'
cbi_invalid = 'Ungültige Eingabe'
cbi_invalid_section = 'Validierung fehlgeschlagen: Bitte die Eingabefelder auf Fehler überprüfen.'
cbi_missing = 'Dieses Feld muss ausgefüllt werden'
@@ -11,3 +12,4 @@ cbi_manual = '-- benutzerdefiniert --'
cbi_select = '-- Bitte auswählen --'
cbi_gorel = 'Gehe zu relevanter Konfigurationsseite'
cbi_applying = 'Änderungen werden angewandt'
+cbi_upload = 'hochgeladene Datei'
diff --git a/i18n/german/luasrc/i18n/cbi.de.xml b/i18n/german/luasrc/i18n/cbi.de.xml
index c989f8d8db..ab442aeaf7 100644
--- a/i18n/german/luasrc/i18n/cbi.de.xml
+++ b/i18n/german/luasrc/i18n/cbi.de.xml
@@ -4,6 +4,7 @@
Eintrag hinzufügen
Eintrag entfernen
+Eintrag ersetzen
Ungültige Eingabe
Validierung fehlgeschlagen: Bitte die Eingabefelder auf Fehler überprüfen.
Dieses Feld muss ausgefüllt werden
@@ -15,5 +16,6 @@
-- Bitte auswählen --
Gehe zu relevanter Konfigurationsseite
Änderungen werden angewandt
+hochgeladene Datei
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua
index 97c453cf2f..8cde0a1777 100644
--- a/libs/cbi/luasrc/cbi.lua
+++ b/libs/cbi/luasrc/cbi.lua
@@ -30,6 +30,7 @@ require("luci.template")
require("luci.util")
require("luci.http")
require("luci.uvl")
+require("luci.fs")
local uci = require("luci.model.uci")
local class = luci.util.class
@@ -1328,3 +1329,44 @@ function Button.__init__(self, ...)
self.inputstyle = nil
self.rmempty = true
end
+
+
+FileUpload = class(AbstractValue)
+
+function FileUpload.__init__(self, ...)
+ AbstractValue.__init__(self, ...)
+ self.template = "cbi/upload"
+ if not self.map.upload_fields then
+ self.map.upload_fields = { self }
+ else
+ self.map.upload_fields[#self.map.upload_fields+1] = self
+ end
+end
+
+function FileUpload.cfgvalue(self, section)
+ local val = AbstractValue.cfgvalue(self, section)
+ if val and luci.fs.access(val) then
+ return val
+ end
+ return nil
+end
+
+function FileUpload.formvalue(self, section)
+ local val = AbstractValue.formvalue(self, section)
+ if val then
+ if not luci.http.formvalue("cbi.rlf."..section.."."..self.option) and
+ not luci.http.formvalue("cbi.rlf."..section.."."..self.option..".x")
+ then
+ return val
+ end
+ luci.fs.unlink(val)
+ self.value = nil
+ end
+ return nil
+end
+
+function FileUpload.remove(self, section)
+ local val = AbstractValue.formvalue(self, section)
+ if val and luci.fs.access(val) then luci.fs.unlink(val) end
+ return AbstractValue.remove(self, section)
+end
diff --git a/libs/cbi/luasrc/view/cbi/header.htm b/libs/cbi/luasrc/view/cbi/header.htm
index ce5d66d77a..3f60baf52c 100644
--- a/libs/cbi/luasrc/view/cbi/header.htm
+++ b/libs/cbi/luasrc/view/cbi/header.htm
@@ -14,7 +14,7 @@ $Id$
-%>
<%+header%>
-