获取在 CSJS 中选择的文件 xp:fileUpload 的文件大小
Get filesize of file selected xp:fileUpload in CSJS
我想检查在 CSJS 的 xp:fileupload 控件中选择的文件的大小,这样我就可以防止它被提交(并且可能由于服务器上设置的限制而失败)
这可能吗?
我找到了这个规范,但我不确定如何使用它:https://www.openntf.org/xspext/xpages%20extension%20library%20documentation.nsf/xpages-doc/xp_fileUpload.html#prop_size
如果浏览器supports the FileReader API那么你可以执行以下操作来获取文件大小的句柄(假设fileuploadId
是xp:fileUpload
控件的id):
if (typeof FileReader !== "undefined") {
// get the file size from the file input field
if (dojo.byId(fileuploadId) && dojo.byId(fileuploadId).files) {
var fsize = dojo.byId(fileuploadId).files[0].size / 1024 / 1024;
}
}
除非开发了某种 JS 客户端功能,否则 xp 控件无能为力。
当然,JSF 框架只能在为时已晚的时候检查文件大小,在文件已经完整上传到服务器时才读取。但是我不放弃这种可能性,因为它在后备方案中仍然有用。
在客户端,您的选择是使用 FileReader
(compatibility)。您可以按照这些行定义一个函数:
function checkFileSize(inputFile) {
if (!FileReader) return;
var file = inputFile.files[0];
if (file && file.size > Number(inputFile.dataset.limit)) {
inputFile.value = '';
alert(inputFile.dataset.error);
}
}
文件上传(示例设置为与 onchange 一起使用,并且限制为 1 MB):
<xp:fileUpload id="uploadFile" onchange="checkFileSize(event.target)">
<xp:this.attrs>
<xp:attr name="data-limit" value="1000000" />
<xp:attr name="data-error" value="The file exceeds 1MB" />
</xp:this.attrs>
</xp:fileUpload>
我想检查在 CSJS 的 xp:fileupload 控件中选择的文件的大小,这样我就可以防止它被提交(并且可能由于服务器上设置的限制而失败)
这可能吗?
我找到了这个规范,但我不确定如何使用它:https://www.openntf.org/xspext/xpages%20extension%20library%20documentation.nsf/xpages-doc/xp_fileUpload.html#prop_size
如果浏览器supports the FileReader API那么你可以执行以下操作来获取文件大小的句柄(假设fileuploadId
是xp:fileUpload
控件的id):
if (typeof FileReader !== "undefined") {
// get the file size from the file input field
if (dojo.byId(fileuploadId) && dojo.byId(fileuploadId).files) {
var fsize = dojo.byId(fileuploadId).files[0].size / 1024 / 1024;
}
}
除非开发了某种 JS 客户端功能,否则 xp 控件无能为力。
当然,JSF 框架只能在为时已晚的时候检查文件大小,在文件已经完整上传到服务器时才读取。但是我不放弃这种可能性,因为它在后备方案中仍然有用。
在客户端,您的选择是使用 FileReader
(compatibility)。您可以按照这些行定义一个函数:
function checkFileSize(inputFile) {
if (!FileReader) return;
var file = inputFile.files[0];
if (file && file.size > Number(inputFile.dataset.limit)) {
inputFile.value = '';
alert(inputFile.dataset.error);
}
}
文件上传(示例设置为与 onchange 一起使用,并且限制为 1 MB):
<xp:fileUpload id="uploadFile" onchange="checkFileSize(event.target)">
<xp:this.attrs>
<xp:attr name="data-limit" value="1000000" />
<xp:attr name="data-error" value="The file exceeds 1MB" />
</xp:this.attrs>
</xp:fileUpload>