我想检查在CSJS中的xp:fileupload控件中选择的文件的大小,以便我可以阻止它被提交(并且由于服务器上设置的限制可能会失败)
这可能吗?
我找到了这个规范,但我不确定如何使用它:https://www.openntf.org/xspext/xpages%20extension%20library%20documentation.nsf/xpages-doc/xp_fileUpload.html#prop_size
答案 0 :(得分:2)
如果浏览器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;
}
}
答案 1 :(得分:2)
除非开发了某种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);
}
}
fileUpload(示例设置为使用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>