我有以下JavaScript從畫布產生圖像並將其上傳到服務器。什麼會導致HTML5畫布toBlob創建不完整的圖像?
var can = document.createElement('canvas');
can.width = 600;
can.height = 600;
var ctx = can.getContext('2d');
ctx.fillRect(0, 0, can.width, can.height);
ctx.fillText("Julia", can.width/2, can.height/2);
can.toBlob(uploadImage, "image/jpg", 0.9);
function uploadImage(jpeg) {
var data = new FormData();
data.append('image', jpeg, 'image.jpg');
...
}
幾乎每隔一段時間,結果看起來就像上面,只是部分繪製。多個畫布被連續處理和上傳,只有在完成ajax(在...部分)時纔會繼續,因此一次只能有一個。
你見過這種情況嗎?如果是這樣,那麼在這個過程中我應該進一步調試?可能是上下文對象中的設置或其他東西?
編輯
上傳是一個Ajax後,只有在成功解決分公司承諾。它實際上使用角度的$ http服務:
$http({method: 'POST', url: '...', data: data}).then(function(response) {
// callback that processes and uploads the next image
});
對我來說,它看起來像圖片上傳被中斷,並且只有圖像的一部分。我從來沒有見過toBlob或toDataURL這樣做的圖像,但我已經看到了很多不完整的jpegs,當由於連接失敗而下載和上傳時,看起來像是這樣。 – Blindman67
你可以顯示上傳的代碼嗎? – adam0101
如果服務器沒有讀取整個請求,那麼JavaScript有可能看到成功路徑?......我想不是,但也許這是一個有問題的問題。也許在服務器上的一個簡單的緩衝問題......也許我可以通過blob大小作爲另一個表單參數,並檢查它對服務器上收到的文件大小。 –