Для этого я получаю строку с содержимым, возвращаемым методом toDataURl().
Код: Выделить всё
dataURL = canvas.toDataURL({
format: 'bmp',
quality: 1.0
});
Код: Выделить всё
dataURL = dataURL.substr(dataURL.lastIndexOf(',') + 1, dataURL.length - dataURL.lastIndexOf(',') - 1);
Код: Выделить всё
async function exportarCanvasF1(nombrearchivo, start_) {
const chunkSize = 90000; // size of each chunk
let start = Number(start_);
let start_limite = (start == 0 ? Number(start_) : Number(start_) + 1) + chunkSize;
if (start_limite > dataURL.length) {
start_limite = (start_limite - (start_limite - dataURL.length - 1));
}
let dataURL_;
if (Number(start) < dataURL.length) {
dataURL_ = dataURL.substr(start, chunkSize);
$.ajax({
type: "POST",
url: "Respuestaajax.aspx/Respuestaaj",
contentType: "application/json; charset=utf-8",
data: '{"parametro":"funcion","valor":"TroceadoFileBase64","tabla":"' + dataURL_ + '","campo":"' + nombrearchivo + '","criterio":"' + start_limite + '","v1":""}',
dataType: "json",
success: function (devolucion) {
if (devolucion.d) {
var d = JSON.parse(devolucion.d);
exportarCanvasF1(d[0][1], d[1][1]);
}
},
error: function (req, status, error) {
alert("No hubo respuesta desde el servidor. Prueba otra vez.");
}
});
}
else if (!Number(start) < dataURL.length) {
$.ajax({
type: "POST",
url: "Respuestaajax.aspx/Respuestaaj",
contentType: "application/json; charset=utf-8",
data: '{"parametro":"funcion","valor":"TroceadoFileBase64_fin","tabla":"' + nombrearchivo + '","campo":"","criterio":"","v1":""}',
dataType: "json",
success: function (devolucion) {
if (devolucion.d) {
}
},
error: function (req, status, error) {
alert("No hubo respuesta desde el servidor. Prueba otra vez.");
}
});
}
}
При каждой отправке Ajax данные записываются в файл TXT. Наконец, я получаю полное содержимое этого текстового файла с помощью File.ReadAllText.
Чтобы создать графический файл на сервере, я конвертирую Base-64 в байтовый массив с помощью метода Convert.FromBase64String и затем передайте этот массив в качестве параметра File.WriteAllBytes.
Код: Выделить всё
string strtextfile = File.ReadAllText((string)HttpContext.Current.Server.MapPath("~") + "google/archivoseditados/" + Left(nombrefile, nombrefile.Length - 4) + ".txt");
byte[] b = null;
b = Convert.FromBase64String(strtextfile);
File.WriteAllBytes((string)HttpContext.Current.Server.MapPath("~") + "google/archivoseditados/" + nombrefile, b);
Интересно, имеет ли метод toDataURL() какие-либо ограничения на максимальный размер, который он может обработать.
Я все просмотрел и увидел, что строка Base-64 идентична данным, сгенерированным в клиенте, нельзя думать, что трансфер состоялся ошибочен или внес изменения.
Причина отправки файла через Ajax таким способом заключается в том, что источником является Fabric.Canvas, а не объект File или существующий файл. Мне нужны изменения, внесенные в ткань. Холст.
Подробнее здесь: https://stackoverflow.com/questions/792 ... l-and-ajax
Мобильная версия