这是我上传图片配置文件的指令。它工作正常,但我想知道的是,我们如何过滤此指令以仅允许特定的扩展名,因为我只想允许图像。我正在使用fineupload。随意询问图片网址下方的代码是e.target.result。
app.directive('uploadProfile', function () {
return function (scope, element, attrs, $window) {
var $uploadCrop;
function readFile(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('.cropper').addClass('ready')
$window.alert("hi")
$uploadCrop.croppie('bind', {
url: e.target.result
}).then(function () {
console.log("do nothing")
});
}
reader.readAsDataURL(input.files[0]);
}
else {
swal("Sorry - you're browser doesn't support the FileReader API");
}
}
$(element).on("change", function () {
readFile(this)
});
$uploadCrop = $('.cropper').croppie({
url: "/static/img/yahshua.jpg",
viewport: {
width: 170,
height: 170,
type: 'circle',
},
enableExif: true,
enableZoom: true,
enforceBoundary: false
});
$(element).on('change', function () { readFile(this); });
$('#cropImage').on('click', function (ev) {
$uploadCrop.croppie('result', {
type: 'base64',
size: 'viewport'
}).then(function (resp) {
scope.record = {}
scope.record.cropped = resp
scope.main.upload_profile(resp)
});
});
};
})
答案 0 :(得分:3)
查看了所有代码并发表了评论
解决方案是使用仅将文件输入属性设置为accept="image/*"
app.directive('uploadProfile', function () {
return function (scope, element, attrs, $window) {
var $uploadCrop;
function readFile(input) {
// if (input.files && input.files[0]) {
// files are always avalible nowdays
if (input.files[0]) {
// You don't need the FileReader... (we will use object urls)
// var reader = new FileReader();
// reader.onload = function (e) {
$('.cropper').addClass('ready')
$window.alert('hi')
$uploadCrop.croppie('bind', {
url: URL.createObjectURL(input.files[0])
}).then(function () {
console.log("do nothing")
});
// }
// reader.readAsDataURL(input.files[0]);
}
// All browswers support FileReader nowdays...
// else {
// swal("Sorry - you're browser doesn't support the FileReader API");
// }
}
// set file attribute's accept to "image/*"
// This will only allow users to only select images
element.accept = 'image/*'
$(element).on("change", function () {
readFile(this)
});
$uploadCrop = $('.cropper').croppie({
url: "/static/img/yahshua.jpg",
viewport: {
width: 170,
height: 170,
type: 'circle',
},
enableExif: true,
enableZoom: true,
enforceBoundary: false
});
// You are already doing this above
// $(element).on('change', function () { readFile(this); });
$('#cropImage').on('click', function (ev) {
$uploadCrop.croppie('result', {
type: 'base64', // I would encurage you to use blob & FormData instead
size: 'viewport'
}).then(function (resp) {
scope.record = {}
scope.record.cropped = resp
scope.main.upload_profile(resp)
});
});
};
})
答案 1 :(得分:2)
如果您的HTML输入类型为“文件”,则可以添加“接受”属性以将文件类型限制为仅图像: https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input/file
<input type="file"
id="avatar" name="avatar"
accept="image/png, image/jpeg">