Мне нужно создать функцию, которая получает файл из параметра, изменять его размер и возвращать файл для загрузки.
У меня уже есть код для получения файла (с помощью загрузки файла jQuery), затем я захватываю переменную файла и передаю этот метод с именем resizeImage, который я получил из этой ссылки, но я не мог понять, как вернуть файл, который я изменено (я новичок в javascript). поэтому я могу отправить его на амазонку S3. ЕСЛИ кто-то хочет увидеть код, вот он: http://pastebin.com/bgYLSFsR
вот эта функция, которую я придумал:
function resizeImage(f) {
var file = f;
var img = document.createElement("img");
var reader = new FileReader();
reader.onload = function(e) {img.src = e.target.result}
reader.readAsDataURL(file);
var MAX_WIDTH = 100;
var MAX_HEIGHT = 100;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, 100, 100);
}
любое предложение очень приветствуется, спасибо!
Вы не можете сделать это с клиентской стороны, поскольку по соображениям безопасности - создание файлов запрещено браузером:
там нет способа, если это не текстовый файл, и в этом случае есть некоторые ограниченные,
клиентские решения, такие как: http://jsfiddle.net/VBJ9h/319/, используя:
<a href="data:application/octet-stream,field1%2Cfield2%0Afoo%2Cbar%0Agoo%2Cgai%0A">CSV</a>
взломать лимит; Он отлично работает с текстовыми файлами, но IE будет иметь проблему, так как он ограничивает длину href, и это может быть непригоден для вашего файла.
Другой способ - использовать flash, IE что-то вроде Downloadify и передать ему двоичное представление.
Ваш третий вариант - передать результат серверному контроллеру, который будет создавать и возвращать изображение для вас.