Что порождение этой “Недопустимой длины для Основы 64 массива символов”

Это действительно не должно вызывать беспокойства, потому что ваш браузер будет кэшировать загруженную модель вместе со всеми ее весами. Таким образом, вы можете просто использовать публичный URL. Любой доступ после первого раза будет обслуживаться из кэша браузера, и на самом деле загрузка снова не будет.


Если вы действительно хотите служить в любом случае локально или хотя бы понять, почему это не сработало раньше:

Файл model.json - это еще не вся история - он содержит weightsManifest раздел с относительными путями к файлам весов. Когда вы загружаете model.json из исходного URL, он разрешает и загружает все соседние файлы весов. Таким образом, чтобы обслуживать модель локально, вам нужно будет также обслуживать все эти файлы.

Получить список весовых файлов, к сожалению, не совсем просто, поскольку Google Cloud Storage не предоставляет списки каталогов в доступной форме. Вы, конечно, можете найти имена файлов из model.json (ищите такие вещи, как "paths": ["group47-shard1of1"]. Второй вариант - использовать gsutil из командной строки, что должно позволить вам просто загрузить всю папку. Третий вариант - использовать API REST для отображения содержимого каталога: https://www.googleapis.com/storage/v1/b/tfjs-models/o?prefix=tfjs/mobilenet_v1_0.25_224 и найдите там записи «name».

Четвертый и самый простой вариант - создать URL-адреса с нуля: в этом случае существует 55 весовых групп, поэтому URL-адреса варьируются от https: / /storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/group1-shard1of1 до https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/group55-sh Ни одна из групп не имеет более одного осколка.

89
задан Michael 23 June 2016 в 16:02
поделиться

5 ответов

Я видел эту ошибку, вызванную сочетанием хорошего размера состояния просмотра и более агрессивных устройств / брандмауэров для фильтрации содержимого (особенно при работе с образовательными учреждениями K-12).

Мы решили эту проблему, сохранив Viewstate в SQL Server. Перед тем, как пойти по этому пути, я бы рекомендовал попытаться ограничить использование состояния просмотра, не храня в нем ничего большого и отключив его для всех элементов управления, которым он не нужен.

Ссылки для хранения ViewState в SQL Server:
MSDN - Обзор PageStatePersister
ASP Alliance - Простой метод сохранения состояния просмотра в проекте кода SQL Server
- Модель поставщика ViewState

36
ответ дан 24 November 2019 в 07:17
поделиться

Я предполагаю, что что-то либо кодирует, либо декодирует слишком часто - или что у вас есть текст с несколькими строками внутри.

Строки Base64 должны быть кратны 4 символам по длине - каждые 4 символа представляют 3 байта входных данных. Каким-то образом данные состояния представления, передаваемые обратно ASP.NET, повреждены - длина не кратна 4.

Вы регистрируете пользовательский агент, когда это происходит? Интересно, может ли это где-то плохо работать браузер ... другая возможность - прокси-сервер делает непослушные вещи. Аналогичным образом попробуйте записать длину содержимого запроса, чтобы увидеть, происходит ли это только для больших запросов.

21
ответ дан 24 November 2019 в 07:17
поделиться

Взгляните на свои HttpHandlers. Я заметил некоторые странные и совершенно случайные ошибки в течение последних нескольких месяцев после того, как я реализовал инструмент сжатия (RadCompression от Telerik). Я заметил такие ошибки, как:

  • System.Web.HttpException: невозможно проверить данные.

  • System.Web.HttpException: клиент отключен. ---> System.Web.UI.ViewStateException: недопустимое состояние просмотра.

и

  • System.FormatException: недопустимая длина для массива символов Base-64.

  • System.Web.HttpException: клиент отключился. ---> System.Web.UI.ViewStateException: недопустимое состояние просмотра.

Я писал об этом в своем блоге.

1
ответ дан 24 November 2019 в 07:17
поделиться

После того, как urlDecode обработает текст, он заменяет все символы '+' на '' ... таким образом, возникает ошибка. Вы должны просто вызвать этот оператор, чтобы снова сделать его совместимым с базой 64:

        sEncryptedString = sEncryptedString.Replace(' ', '+');
83
ответ дан 24 November 2019 в 07:17
поделиться

Это из-за огромного состояния просмотра. В моем случае мне повезло, так как я не использовал состояние просмотра. Я только что добавил enableviewstate = "false" в тег формы, и состояние просмотра изменилось с 35k до 100 символов

0
ответ дан 24 November 2019 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: