来自MSDN论坛here的原始问题,但由于没人接听,我决定试试SO。
我一直在使用一种方式让用户将图像从本地计算机上传到我的服务器(DB)。但是现在我添加了缩小图像的可能性,所以如果用户选择(通过FileOpenPicker
)一个巨大的图像,我会先将它缩小一点,然后再显示{{1元素并将其上传到服务器(根据用户请求)。
执行此操作后,当我想通过img
设置img.src
属性时,我会在JavaScript控制台中收到主题警告,因为我总是这样做。此外,当我尝试上传文件时,我得到一个"访问被拒绝"错误。
有人可以帮忙吗?这是一个小代码片段。
URL.createObjectURL
这是internalSet函数的代码,实际设置src属性
的代码var pixelData, newFile;
file.openAsync(Windows.Storage.FileAccessMode.read)
.then(function (origin) {
return Windows.Graphics.Imaging.BitmapDecoder.createAsync(origin);
}.bind(this)).then(function (bitmapDecoder) {
var bitmapTransform = new Windows.Graphics.Imaging.BitmapTransform();
bitmapTransform.scaledHeight = 768;
bitmapTransform.scaledWidth = 1024;
return bitmapDecoder.getPixelDataAsync(Windows.Graphics.Imaging.BitmapPixelFormat.rgba8, Windows.Graphics.Imaging.BitmapAlphaMode.straight, bitmapTransform, Windows.Graphics.Imaging.ExifOrientationMode.respectExifOrientation, Windows.Graphics.Imaging.ColorManagementMode.doNotColorManage);
}.bind(this)).then(function (data) {
pixelData = data;
var fileName = this.maximumUploadSize + '_' + file.name;
return Windows.Storage.ApplicationData.current.temporaryFolder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.replaceExisting);
}.bind(this)).then(function (aux) {
newFile = aux;
Windows.Storage.AccessCache.StorageApplicationPermissions.futureAccessList.add(newFile, newFile.name);
return newFile.openAsync(Windows.Storage.FileAccessMode.readWrite);
}.bind(this)).then(function (destination) {
return Windows.Graphics.Imaging.BitmapEncoder.createAsync(Windows.Graphics.Imaging.BitmapEncoder.pngEncoderId, destination);
}.bind(this)).then(function (encoder) {
encoder.setPixelData(Windows.Graphics.Imaging.BitmapPixelFormat.rgba8, Windows.Graphics.Imaging.BitmapAlphaMode.premultiplied, 1024, 768, 96, 96, pixelData.detachPixelData());
return encoder.flushAsync();
}.bind(this)).then(function () {
this.internalSet(newFile);
}.bind(this), function (error) {
Utils.showError(error);
});
提前致谢!