質問: function() { console.log(ajax.responsetext); } ajax.send("imgdata=" + canvasdata); } これで画像ファイルが作成され、空にはなりません。コンテンツタイプが重要であり、それをx-www-form-urlencodedに変更すると画像データを送信できるようになりました。コンソールは(かなり大きい)文字列のbase64コードを返し、データファイルは約140 kbです。ただし、まだ開くことができず、画像としてフォーマットされていないようです。
回答: 私は似たようなことに取り組んだ。 canvas base64-encoded imageをuint8array blobに変換する必要がありました。function b64touint8array(b64image) { var img = atob(b64image.split(',')[1]); var img_buffer = []; var i = 0; while (i < img.length) { img_buffer.push(img.charcodeat(i)); i++; } return new uint8array(img_buffer); } var b64image = canvas.todataurl('image/jpeg'); var u8image = b64touint8array(b64image); var formdata = new formdata(); formdata.append("image", new blob([ u8image ], {type: "image/jpg"})); var xhr = new xmlhttprequest(); xhr.open("post", "/api/upload", true); xhr.send(formdata);