大きなメディア ファイルをアップロードした際に、詳しい説明のないエラーが表示される


解説

大きなメディア ファイルをアップロードした際に、以下のような詳しい説明のないエラーが表示されることがあります。

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

 

このエラーは、メディア ファイルのサイズがMedia.MaxSizeInDatabase設定によって設定されたファイル サイズの制限を超えた場合に表示されます。

本来予期されているメッセージのフォーマットは次のとおりです。

The file {filename} is too big to be uploaded.
The maximum size of a file that can be uploaded is 5 MB.

 

解決策

この問題を解決するには、以下の手順の実施を検討してください。

  1. <website_root>\sitecore\shell\client\Business Component Library\Layouts\Renderings\Forms\Uploaderフォルダー配下にあるUploader.jsファイルをバックアップします。
  2. 元のファイルにあるuploadメソッドを探します。見つかったら、これが以下と同一の内容であることを確認します。
    upload: function () {
      var that = this;      
      this.startUploadTimer(this.datas);      
      this.updateUploadInfo(true, true);
    
          //for each files - do the upload
          _.each(this.datas, function (data) {
            data.submit().error(function (jqXHR, textStatus, errorThrown) {
              if (jqXHR.status === 401) {
                _sc.Helpers.session.unauthorized();
                return;
              }
              // Triggers error on each model that had an abort
              if (errorThrown === "abort") {
                that.app.trigger("upload-error", { id: data.__id });
              } else {
                var errors = [{ Message: errorThrown }];
                that.app.trigger("sc-error", errors);
                that.app.trigger("upload-error", { id: data.__id, errors: errors });
              } 
            });
          });
        },
  3. uploadメソッドの実装を以下の通りに変更します。
    upload: function () {
      var that = this;      
      this.startUploadTimer(this.datas);      
      this.updateUploadInfo(true, true);
    
          //for each files - do the upload
          _.each(this.datas, function (data) {
            data.submit().error(function (jqXHR, textStatus, errorThrown) {
              if (jqXHR.status === 401) {
                _sc.Helpers.session.unauthorized();
                return;
              }
              // Triggers error on each model that had an abort
              if (jqXHR.responseText.indexOf('errorItems') != -1) {
                var errordata = jqXHR.responseText.split('');
                var parsedJson = JSON.parse(errordata[1]);
                _.each(parsedJson.errorItems[1].Message, function (error) {
                  error.id = data.__id;
                });
                var errors = [{ Message: parsedJson.errorItems[1].Message }];
                that.app.trigger("sc-error", errors);
                that.app.trigger("upload-error", { id: data.__id, errors: parsedJson.errorItems[1].Message });
    
                return undefined;
              }
              else{
                if (errorThrown === "abort") {
                  that.app.trigger("upload-error", { id: data.__id });
                } else {
                  var errors = [{ Message: errorThrown }];
                  that.app.trigger("sc-error", errors);
                  that.app.trigger("upload-error", { id: data.__id, errors: errors });
                }
              } 
            });
          });
      },
  4. ブラウザのキャッシュをクリアし、ブラウザが更新されたUploader.jsファイルを確実に読み込むようにします。