tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:『apex:inputFile』とファイルサイズ判定

Visualforceページでファイルアップロードを実行できる『apex:inputFile』タグとファイルサイズの判定についてです。『apex:inputFile』タグにはfilesize属性が用意されているので、これでApexクラス側に変数を用意して値を保持することが可能となっています。

<apex:inputFile value="{!uploadFile}" filename="{!fileName}" filesize="{!fileSize}" title="ファイル添付" size="80" />


Apexクラス側での値判定は次のようになります。

public Boolean checkIsFileSizeError(Long fileSize) {
    if(fileSize != null && fileSize > 1242880){
        Decimal fileSizeView = this.converFileSizeMegaByte(fileSize);
        String errorMsg = 'ファイルサイズの上限を超えています。1MB以内のファイルにしてください。 : [アップロードサイズ = 約' + fileSizeView + 'MB)]';
        ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.Error, errorMsg)); 
        return true;
    }
    return false;
}


ファイルサイズをMBに変換するのはこんな感じみたいです。

public Decimal converFileSizeMegaByte(Long fileSize) {
    Decimal result = 0;
    if (fileSize != null) {
        result = Decimal.valueOf(fileSize / 1048576).setScale(1);
    }
    return result;
}


という感じの方法がDiscussionFormで紹介されていました。
f:id:tyoshikawa1106:20160126002957p:plain

Client side file size validation for <apex:inputFile ............ - Salesforce Developer Community


上記方法で指定サイズ以上のファイルサイズの場合、エラーにして処理終了というような使い方ができます。

関連情報

添付ファイルのサイズ上限ですが、昔5MBまででしたが、関連リストの場合は25MBまでアップできるようになっていました。

f:id:tyoshikawa1106:20160126002327p:plain

Salesforce のファイルサイズ制限