Используйте moment.js для синтаксического анализа дат:
var caseOne = moment("Jul 8, 2005", "MMM D, YYYY", true).toDate();
var caseTwo = moment("2005-07-08", "YYYY-MM-DD", true).toDate();
Третий аргумент определяет строгий разбор (доступно с 2.3.0). Без него moment.js также может давать неверные результаты.
Я устроил аналогичный контекст, как вы описали, и я столкнулся с той же ошибкой. Мне удалось заставить его работать, удалив "
с начала и конца содержимого и заменив \/
на /
.
Вот фрагмент кода:
var result = client.Execute(request);
var response = result.Content
.Substring(1, result.Content.Length - 2)
.Replace(@"\/","/");
byte[] d = Convert.FromBase64String(response);
В качестве альтернативы вы можете использовать XML для формата ответа:
[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Xml)]
public string ExportToExcel() { //... }
На стороне клиента:
request.AddHeader("Accept", "application/xml");
request.AddHeader("Content-Type", "application/xml");
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/xml"; };
var result = client.Execute(request);
var doc = new System.Xml.XmlDocument();
doc.LoadXml(result.Content);
var xml = doc.InnerText;
byte[] d = Convert.FromBase64String(xml);
Убедитесь, что ваши данные изображения содержат некоторую информацию заголовка в начале:
imageCode = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...
Это приведет к вышеуказанной ошибке.
Просто удалите все перед первым включением и включите запятая, и вам хорошо идти.
imageCode = "iVBORw0KGgoAAAANSUhEUgAAAMgAAABkC...
,
, если присутствует data:
. Bam. Работаю сейчас.
– Maxime Rouiller
14 June 2016 в 13:14
Мы можем удалить ненужный ввод строки перед значением.
string convert = hdnImage.Replace("data:image/png;base64,", String.Empty);
byte[] image64 = Convert.FromBase64String(convert);
Возможно, он преобразуется в модифицированный Base64, где символы +
и /
изменены на -
и _
. См. http://en.wikipedia.org/wiki/Base64#Implementations_and_history
. Если это так, вам нужно изменить его:
string converted = base64String.Replace('-', '+');
converted = converted.Replace('_', '/');
Поскольку вы возвращаете строку как JSON, эта строка будет включать кавычки открытия и закрытия в исходном ответе. Поэтому ваш ответ должен выглядеть следующим образом:
"abc123XYZ=="
или что-то еще ... Вы можете попробовать подтвердить это с помощью Fiddler.
Мое предположение заключается в том, что result.Content
является исходной строкой , включая кавычки. Если это так, то result.Content
нужно будет десериализовать, прежде чем вы сможете его использовать.
На всякий случай, если вы не знаете тип загруженного изображения, и вам просто нужно удалить его заголовок base64
:
var imageParts = model.ImageAsString.Split(',').ToList<string>();
//Exclude the header from base64 by taking second element in List.
byte[] Image = Convert.FromBase64String(imageParts[1]);
Как сказал Алекс Филипович , проблема была неправильной кодировкой. Файл, который я прочитал, был UTF-8-BOM
и сбросил указанную выше ошибку на Convert.FromBase64String()
. Переход на UTF-8
работал без проблем.