나는 서버 측에서 디코딩하는 것을 좋아하지만 어쨌든.
기본적으로 canvas.toDataUrl()에서 가져온 텍스트를 분할하고 Base64 텍스트를 이진 데이터로 변환 한 다음 서버로 보냅니다. "crypto"라이브러리에서 "CryptoUtils"를 사용하여 Base64를 처리하십시오. 적절한 http 서버로 테스트하지는 않았지만이 코드는 제대로 작동합니다.
// Draw an on-memory image.
final CanvasElement canvas = document.createElement('canvas');
canvas.width = 256;
canvas.height = 256;
final CanvasRenderingContext2D context = canvas.getContext('2d');
final CanvasGradient gradient = context.createLinearGradient(0, 0, 0, canvas.height);
gradient.addColorStop(0, "#1e4877");
gradient.addColorStop(0.5, "#4584b4");
context.fillStyle = gradient;
context.fillRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.moveTo(10, 10);
context.lineTo(240, 240);
context.lineWidth = 10;
context.strokeStyle = '#ff0000';
context.stroke();
// Convert the image to data url
final String dataUrl = canvas.toDataUrl('image/jpeg');
final String base64Text = dataUrl.split(',')[1];
final Uint8ClampedList base64Data = new Uint8ClampedList.fromList(
CryptoUtils.base64StringToBytes(base64Text));
// Now send the base64 encoded data to the server.
final HttpRequest request = new HttpRequest();
request
..open("POST", 'http://yourdomain.com/postservice')
..onReadyStateChange.listen((_) {
if (request.readyState == HttpRequest.DONE &&
(request.status == 200 || request.status == 0)) {
// data saved OK.
print("onReadyStateChange: " + request.responseText); // output the response from the server
}
})
..onError.listen((_) {
print("onError: " + _.toString());
})
..send(base64Data);
는 여기 완전한 조각을 기록했다.
https://gist.github.com/hyamamoto/9391477
가 왜 base64로 문자열로 전송하고 그것을 서버 측 변환 : here에서 코드가 작동합니까? – Johan
서버로드를 줄이기 위해 – Roman
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data – Johan