我正在研究 FineUploader 的实现。特殊要求是在客户端即时创建缩略图,然后使用原始 image-upload 上传这些缩略图。
我有一个适用于 FF 的实现,但似乎不适用于 iO。它看起来像这样:
var uploader = new qq.FineUploaderBasic({
button: document.getElementById(buttonID),
request: {
endpoint: '/up/load/a/' + $('section#ajax-viewport').data('albumid')
},
callbacks: {
onSubmit: function(id, fileName) {
// getFile obtains the file being uploaded
file = this.getFile(id);
// create a thumbnail & upload it:
ThumbDown(file, id, 200, fileName);
},
}
})
此代码调用一个函数:
function ThumbDown(file, id, dimension, fileName) {
var reader = new FileReader();
reader.onload = function(e) {
var img = document.createElement("img");
img.onload = function (ev) {
var thumbnailDimensions; // object holding width & height of thumbnail
var c=document.getElementById("canvas-for-thumbnails"); // must be a <canvas> element
var ctx=c.getContext("2d");
// set thumbnail dimensions of canvas:
thumbnailDimensions = calcThumbnailDimension (img.width, img.height, dimension )
c.width = thumbnailDimensions.width;
c.height = thumbnailDimensions.height;
var ctx = c.getContext("2d");
ctx.drawImage(img, 0, 0, c.width, c.height);
uploadThumbnail(c.toDataURL('image/jpeg'), //a base64 encoded representation of the image
id,
fileName); // we need filename to combine with mother-image on the server
};
img.src = e.target.result;
}
reader.readAsDataURL(file);
} // end function
最后,缩略图通过哑 ajax 调用上传:
function uploadThumbnail (base64encodedString, id, fileName) {
$.post('/up/thumb',
{
img : base64encodedString,
id: id,
fileName: fileName
},
function(data) {});
}
我的问题:
1)目前我有两个上传:一个用于母图,另一个用于缩略图。我想将其合并到一个 FineUploader 调用中。但是,由于我的缩略图创建的异步性质,我看不到这样做的方法。
我错过了什么吗?这可以减少到一个 FineUploader 调用吗?
2) 此代码将缩略图作为 base64 编码字符串上传。我想将缩略图作为图像(或作为blob
?)上传。也许通过遵循Jeremy Banks 的这个食谱。这适用于 FineUploader 吗?
3) 还有其他我错过但我应该使用的 FineUploader 选项/方法吗?
一如既往,非常感谢任何帮助。