在CSJS中获取文件选择的文件大小xp:fileUpload

时间:2018-04-20 08:46:35

标签: javascript xpages

我想检查在CSJS中的xp:fileupload控件中选择的文件的大小,以便我可以阻止它被提交(并且由于服务器上设置的限制可能会失败)

这可能吗?

我找到了这个规范,但我不确定如何使用它:https://www.openntf.org/xspext/xpages%20extension%20library%20documentation.nsf/xpages-doc/xp_fileUpload.html#prop_size

2 个答案:

答案 0 :(得分:2)

如果浏览器supports the FileReader API,那么您可以执行以下操作来获取文件大小的句柄(假设fileuploadIdxp: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框架只有在为时已晚的时候才能检查文件大小,当它已经完全上传到服务器时读取。但是我并没有放弃这种可能性,因为它在后备场景中仍然有用。

在客户端,您可以选择使用FileReadercompatibility)。您可以按以下方式定义函数:

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>