Я использую оплаченную учетную запись Filepicker.io.Ошибка 142 от filepicker.io JS API v2 конвертировать вызов после вызова вызова с обрезкой UI
Я получаю обратно сообщение об ошибке 142 от новообращенного вызова через API версии JS 2.
toString
метод объекта ошибки говорит мне, чтобы включить filepicker_debug.js
для получения дополнительной информации, но этот файл дает 404, так что не полезно.
The docs говорят, что 142 означает «Файл пользователя не может быть преобразован с запрошенными параметрами». Параметры, которые я отправляю, - {width: 240, height: 240}
.
Мой код работает pick
операцию (которая использует обрезанный UI), а затем передает «Blob
», который доступен в функции обратного вызова к store
команде (который работает) и команду convert
(который не делает).
Я попытался удалить команду store
, так что только pick
, а затем convert
, но никаких изменений.
Варианты convert
Я прохожу, как указано выше, {width: 240, height: 240}
. Я также пробовал использовать дополнительные опции, например fit:clip
или fit:scale
или rotate:exif
, но это ничего не меняет. Я также попытался сделать это после звонка pickAndStore
, а не только pick
; тоже без изменений.
Я не редактируя «Blob
», который возвращается из команды pick
, и он работает с командой store
, так что я не думаю, что может быть проблема (как это было в a similar issue). Я не думаю, что я делаю что-то не так.
Если я смотрю HTTP-ответ, который возвращается из Filepicker, это код 400 и говорит мне, например, [uuid=16CB6B72517940C7] Invalid conversion parameters
. Если я посмотрю на то, что действительно было отправлено, я думаю, что я вижу проблему.
Этот конкретный запрос POST был отправлен на номер https://www.filepicker.io/api/file/ndayWb5GTmNyPoAOjSdg/convert?crop=955,621,954,954/convert&_cacheBust=1436084602394&plugin=js_lib
с предоставленными данными формы width: 240, height: 240, storeLocation: "S3", storePath: "storyimg/local/iq84xYTsu1jJaRcq_small.jpg"
.
Этот параметр GET crop=955,621,954,954/convert
выглядит довольно подозрительно. Я вижу в «Blob
» имущество url: "https://www.filepicker.io/api/file/ndayWb5GTmNyPoAOjSdg/convert?crop=955,621,954,954"
. Мне кажется, что некоторые JS в библиотеке не ожидают, что параметры урожая (предположительно добавленные пользовательским интерфейсом обрезки) будут существовать здесь, и слепо добавляет /convert
, а остальное.
Люди с файлами: пожалуйста, исправьте это.
Я попытался обойти это, отредактировав объект «Blob
», прежде чем передать его convert
. Обходной путь выглядит немного как это:
filepicker.pick({
cropRatio: 1,
services: ['convert', pickerType],
}, function (blob) {
filepicker.convert($.extend({}, blob, {
url: blob.url.replace(/\/convert\b.*/, ''),
}), {
width: 240,
height: 240,
crop: blob.url.replace(/.*[?&]crop=([0-9,]+)(?:&|$).*/, '$1').split(','),
}, storeOptions, function (blob) {
console.log("Convert completed successfully", blob);
}, handleError);
}, handleError);
Это некрасиво, и после тестирования, я вижу, что это не на самом деле даже работать. Урожай не происходит. Если я удалю width
и height
, он правильно пометит, так что я знаю, как я правильно извлекаю параметры урожая, но с width
и height
все изображение изменяется, а не только обрезанная часть.
На теме, REST API documentation for convert говорит
Обрезка и изменение размера: мы настоятельно рекомендуем против объединения изменения размера (с указанием ширины и высоты) с функциональностью растениеводства, так как он имеет неизвестность эффектов в зависимости от того, урожай применяется до или после изменения размера изображения.
Я начинаю сомневаться, почему я вообще пользуюсь этой услугой.
кажется, что если Filepicker не устраняет эти проблемы, я вынужден не позволить пользователю, чтобы обрезать изображение, или сделать convert
только после моей store
операции (которая уже обрезанного изображения) завершается. Это означает, что я не могу распараллелить сохранение полноразмерных изображений и уменьшенных изображений.
Тот же самый код, который был изначально запущен, теперь работает как ожидалось. Спасибо за исправление этого. – tremby