Member 14552976 Ответов: 1

Как сохранить изображение в SQL с типом данных nvarchar(max)


когда я пытаюсь сохранить изображение в sql, он показывает $%# этот тип данных в столбце изображения.

Что я уже пробовал:

я очень стараюсь, но не могу этого сделать.

Richard MacCutchan

Вам нужно предоставить гораздо больше информации о том, как вы сохраняете изображение и как вы извлекаете его из базы данных.

Member 14552976

я извлекаю изображение в приложении mvc.

RedDk

Я всегда пробую все из них (varbinary, nvarchar, varchar, blob и т. д.), а затем, когда я нахожу, что ничего не работает, переосмысливаю свою первоначальную проблему. Как указано ниже в решении 1, вы пытаетесь наклонить untiltable, если то, что вы считаете yeah-wide (байты), оказывается yeah-wide-x-2/и т. д. Например, пытаться угадать, что такое x и y конкретного файла изображения в его необработанном состоянии, проверяя каждую размерную возможность.

1 Ответов

Рейтинг:
1

OriginalGriff

Не пытайтесь сохранять изображения в Столбцах NVARCHAR (или VARCHAR): они предназначены для текста, а не для двоичных данных. Вместо этого используйте столбец VARBINARY или преобразуйте свое изображение в Base64 и сохраните его - имейте в виду, что вам потребуется гораздо больше места для этого, и вам нужно будет преобразовать его обратно, прежде чем вы сможете его использовать. Типа varbinary является лучшим вариантом.


Member 14552976

если я попытаюсь сохранить его в varbianary, он выдаст ошибку, когда я попытаюсь запустить приложение mvc, которое получает данные в Строковой форме.

OriginalGriff

Затем вам нужно посмотреть на ваше приложение MVC и посмотреть, что оно делает с данными - если оно ожидает двоичные данные в текстовом поле, то его ждет шок от поврежденного изображения: обработка его как данных Unicode действительно испортит изображения, поскольку он будет переведен между UTF-8 и UTF-16 с помощью символов, которые не существуют ...

Он может ожидать текстовую версию изображения - Base64 распространен - но тогда он будет "декодировать" данные в "правильное" изображение, и вам нужно знать, как он это делает, чтобы сохранить его в том же формате.

Member 14552976

теперь я хочу сохранить его в типе данных nvarchar, потому что я извлекаю его в виде строки на стороне контроллера .если я этого не сделаю, это приведет к ошибкам.

OriginalGriff

Нет. Как я уже объяснял, вам нужно проверить, что делает другой конец, и сделать что-то комплиментарное, иначе вы просто создадите себе еще больше проблем.

Member 14552976

разве есть какой-то способ, чтобы сохранить его Ай тип nvarchar

OriginalGriff

Я сказал вам, что вам нужно будет преобразовать его в текстовый формат, такой как Base64, но важно выяснить, что приложение MVC делает с ним, что оно ожидает.
Если он ожидает Base64, то предоставьте это. Если он ожидает необработанный двоичный файл, то ваша таблица должна содержать необработанный двоичный файл.

Member 14552976

он ожидает изображение в виде строки,если я сохраню его в varbinary, он не примет его.

OriginalGriff

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

Являются ли все строки образом? Нет, некоторые из них похожи на этот текст.
Таким образом, приложение MVC должно что-то сделать со строкой, чтобы изменить ее или использовать в качестве строки. Или, по крайней мере, проверить, что это "строка, содержащая изображение", а не "строка, содержащая миры Шекспира".

И очень важно, чтобы все, что он ожидает сделать с этим, вы предоставляли данные в форме, с которой он может справиться. Да, это веревка. Но есть много-много способов сделать "строку, содержащую изображение", и мы понятия не имеем, что она делает. И ясно, что сейчас ты тоже не знаешь. И очень важно, чтобы вы узнали, что он делает, чего он ожидает, потому что в противном случае все это будет пустой тратой времени.

Но я не могу сделать это для тебя, не так ли? Итак, как я сказал день назад: "вам нужно посмотреть на ваше приложение MVC и посмотреть, что оно делает с данными"

А я пойду возьму пару таблеток аспирина - у меня болит голова и вмятина на столе.