好的,我在這一個白色的結尾。我正嘗試使用Javascript調整客戶端上傳的圖片大小。如何在客戶端上調整圖片大小,但不工作
我使用,
<script>
function uploadFiles() {
if (window.File && window.FileReader && window.FileList && window.Blob) {
if (!document.getElementById('confirm').checked) {
alert('You must click "confirm".');
return false;
}
alert('begin');
var files = document.getElementById('file').files;
for(var i = 0; i < files.length; i++) {
alert('start');
resizeAndUpload(files[i]);
}
return false;
} else {
alert('The File APIs are not fully supported in this browser.');
return false;
}
}
function resizeAndUpload(file) {
var reader = new FileReader();
reader.onloadend = function() {
var tempImg = new Image();
tempImg.src = reader.result;
tempImg.onload = function() {
var MAX_WIDTH = 300;
var MAX_HEIGHT = 300;
var tempW = tempImg.width;
var tempH = tempImg.height;
if (tempW > tempH) {
if (tempW > MAX_WIDTH) {
tempH *= MAX_WIDTH/tempW;
tempW = MAX_WIDTH;
}
} else {
if (tempH > MAX_HEIGHT) {
tempW *= MAX_HEIGHT/tempH;
tempH = MAX_HEIGHT;
}
}
var canvas = document.createElement('canvas');
canvas.width = tempW;
canvas.height = tempH;
var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0, tempW, tempH);
var fd = new FormData();
fd.append("upload-avatar", "Upload");
var confirm = 'off';
if (document.getElementById('confirm').checked) {
confirm = 'on';
}
fd.append("confirm", confirm);
fd.append("file", canvas.mozGetAsFile("image.jpg"));
fd.append("license", document.getElementById('license').value);
fd.append("name", document.getElementById('name').value);
var share = 'off';
if (document.getElementById('share').checked) {
share = 'on';
}
fd.append("share", share);
var xhr = new XMLHttpRequest();
xhr.open("POST", "MyUploadServlet");
xhr.send(fd);
alert('done');
}
}
reader.readAsDataURL(file);
}
</script>
然後在我的HTML我有,
<form onsubmit="return uploadFiles()" method="post" enctype="multipart/form-data">
<input id="file" type="file" name="file" multiple/><br/>
<input id="confirm" type="checkbox" name="confirm">confirm</input><br/>
...
<input name="upload-resize" value="Upload and resize" type="submit"/><br/>
</form>
這實際工作,排序的,但網頁不刷新,這是我想做的事情顯示上傳的圖像。如果我從我認爲會導致重新加載的函數返回true,那麼它不起作用,它似乎永遠不會調用該帖子並掛起。 我也試過location.reload()但類似的問題。
好吧,我想我有這個代碼的一些問題:
1 - 如何重新加載頁面?
- >答案似乎可以稱之爲 「history.go(0);」,這似乎工作,
2 - 火狐,Chrome瀏覽器不,IE或Safari 這僅適用於我假設,因爲的使用「canvas.mozGetAsFile(」image.jpg「)」, 任何想法如何讓它在Chrome上工作?
- >使用toBlob似乎工作,但似乎與頁面重載突破,在Firefox而不是其他作品(不,我還沒有嘗試過填充工具)
3 - 理想我想有兩個按鈕,一個做調整大小,一個做正常形式提交,不知道該怎麼做。目前我有兩個完整的表單副本,一個用於調整大小,另一個用於正常文件提交。
4 - 圖像以PNG格式上傳,如何壓縮爲JPEG或壓縮,即使調整大小,一些圖像顯示比他們更大的鬆散壓縮。
- >使用toBlob似乎給您JPG,但似乎與頁面重載突破,在Firefox而不是其他作品(不,我還沒有嘗試過填充工具)
對不起,多部分的問題,但我認爲任何人想要這樣做都需要所有的答案。
我不能完全明白你的觀點。但也許你正在尋求我早些時候嘗試的。我用JavaScript調整客戶端圖片的大小,然後將其上傳到服務器。如果你正在尋找相似的東西,請告訴我。我有代碼,發現一些奇怪的東西。 –
我的問題是如何在調用帖子後重新加載頁面,就像正常的提交帖子會做? – James
window.location.href = window.location.href;試試這可能會得到重點。 –