Alex Reynaud Ответов: 2

Как создать изображение на холсте с iPad?


Я создаю форму подписи, которая должна преобразовать холст HTML5 в файл .png, а затем переместить этот файл в каталог, где его информация может быть скопирована в таблицу SQL. Хотя canvas отлично работает и способен отправлять изображения на сервер на настольном ПК, у него возникают проблемы с этим с iPad, который будет использоваться в качестве основного устройства для подписания форм.

На стороне iPad что-то мешает созданию изображения canvas, в результате чего появляются пустые изображения, которые приложение Windows 10 Photos представляет с текстом: "Похоже, мы не поддерживаем этот формат файла."

Кнопка "Сохранить" берет данные с холста и преобразует их в метод UploadImage в Base64.
$("#btnSave").click(function () {
    var image = document.getElementById("myCanvas").toDataURL("image/png");
    image = image.replace('data:image/png;base64,', '');
    $.ajax({
        type: 'POST',
        url: 'Signature.aspx/UploadImage',
        data: '{ "imageData" : "' + image + '" }',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json'
    });
});

Отсюда метод UploadImage() сохраняет текст imageData в статическом строковом файле filebit. Когда пользователь подтвердит, что это та подпись, которую он хочет отправить, файл .aspx создаст образ из кода Base64, даст ему имя и поместит его в каталог сигнатур, записывая имя файла в таблицу SQL.

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

Я пытался открыть доступ к определенным каталогам, но это не решило проблему написания. После перемещения различных файлов в различные каталоги с помощью iPad я понимаю, что что-то должно быть не так с частью fileStream этой программы, так как что-то внутри нее неправильно записывается, поэтому подписи, сделанные на iPad, не превращаются в изображения.
Раньше изображение отправлялось во временный каталог, но теперь оно отправляется прямо в постоянный каталог, так как программа записывает изображение из строки с кодом Base64.

Gerry Schmitz

Ваша проблема, по-видимому, заключается в том, чтобы "создать" изображение на IPad в первую очередь, а не "отправить".

Просто создайте любое изображение в месте по умолчанию; затем начните беспокоиться о том, чтобы "переместить его".

Alex Reynaud

Вы правы; создание образа-это проблема, и это то, что я хочу знать. Я изменю название этого вопроса.

2 Ответов

Рейтинг:
9

Alex Reynaud

На самом деле проблема заключается не в ошибке JavaScript, а в ошибке C#. Вот что должна делать функция UploadImage() :

public static void UploadImage(string imageData)
{
    var impersonator = new ImpersonationHelper("<domain>", "<username>", "<password>");
    impersonator.StartImpersonating();
    string path = @"\\\\PATH\\TO\\FILE\\DIRECTORY\\";
    if (!Directory.Exists(path)) // creates a new folder if this one doesn't currently exist yet
        Directory.CreateDirectory(path);
    string fileNameWithPath = path + "SIG" + DateTime.Now.ToString("MMddyyyy") + "-" + rand + ".png"; // where rand is randomly-generated elsewhere
    byte[] imageBytes = Convert.FromBase64String(imageData);
    File.WriteAllBytes(fileNameWithPath, imageBytes);
    impersonator.StopImpersonating();
}

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


Рейтинг:
0

Gerry Schmitz

Цитата:
Независимо от того, активно вы используете его или нет, каждое приложение iOS, которое вы разрабатываете, имеет свою собственную уникальную изолированную файловую систему, состоящую из набора каталогов, в первую очередь каталога " документы”. Подробное обсуждение структуры файловой системы iOS и того, как вы выполняете такие задачи, как чтение, запись, удаление, переименование, перемещение и перечисление файлов, выходит за рамки этого руководства, но не волнуйтесь, если все это для вас ново. Я написал несколько подробных руководств, охватывающих наиболее важные темы управления файлами iOS, например, здесь и здесь.


Как интегрировать ваше приложение с приложением Files в iOS 11 | Swift Tutorial[^]


Alex Reynaud

Спасибо за ссылку, но iPad, которые использует моя компания, - самые новые-с 2014 года и смогут работать только до iOS 10.3.3. кроме того, приложение, с которым я работаю, является веб-приложением, следовательно, "url: 'Signature.aspx/UploadImage'." Предполагается, что пользователи перейдут на веб-сайт и представят свою подпись на холсте, который затем автоматически отправляется на сервер в виде изображения. На самом iPad ничего не хранится, поэтому я смущен тем, что есть только проблема, когда вы делаете такие вещи на сенсорном интерфейсе.

Gerry Schmitz

Вы воспринимаете "хранение" слишком буквально.

Речь идет о "постановке" изображения на IPad, пока вы не поймете, как его отправить.

Вы сами сказали, что у вас есть проблема "создания образа". Где же вы в противном случае ожидаете его создать? В "эфире"?

Alex Reynaud

Ну, я понимаю, что мы здесь не *буквально* открываем файлы или изображения. На данный момент код Base64, созданный при нажатии кнопки btnSave, отправляется через статический метод, который затем передает эти данные через BinaryWriter и записывает файл в указанный каталог. Это прекрасно работает на ПК, но не на мобильных устройствах.