我想做什么…
- 用户点击"上传图像"按钮
- 用户从本地机器中选择图像
- 图像已上载到页面
- 图像存储在本地存储器中
- 用户可以导航离开视图,然后返回视图并查看以前上传的图像
- 重复步骤1-5
我认为我可以如何实现…
- ng流插件管理用户上传
- 将图像转换为base64并将图像作为字符串存储在本地存储器中
- 获取base64字符串并将其转换为图像进行预览
我为什么要这样做…
对于第一阶段,我需要向我的导师展示我的应用程序将如何工作,所以我只需要模仿存储在数据库中的图像,这就是我使用本地存储的原因-我知道这是一种糟糕的做法,但我也需要展示本地存储的使用。
我的导师鼓励我使用堆栈溢出,并且知道我发布了这个。
到目前为止的代码…
我的看法
<!-- Upload multiple images with the extensions of png,jpg, jpeg & gif -->
<div flow-init="{target: '/upload', singleFile: false}" flow-file-added="!!{png:1,gif:1,jpg:1,jpeg:1}[$file.getExtension()]" flow-files-submitted="$flow.upload()">
<div class="jumbotron">
<div class="container">
<div><span class="btn btn-default btn-selectimage" flow-btn flow-attrs="{accept:'image/*'}" onchange="previewFile()">Select image</span></div>
<br><p>Only PNG,GIF,JPG files allowed.</p>
</div>
</div>
<div>
<div class="thumbnail" ng-hide="$flow.files.length">
<img src="images/no-images-placeholder.jpg" />
</div>
<div class="thumbnail col-md-3" ng-show="$flow.files.length" ng-repeat="image in $flow.files">
<img id="image-handle" class="preview-blob" flow-img="image" /><br>
<img class="preview" ng-src="{{imageStrings[$index]}}"/>
<div class="image_option_controls">
<span class="btn glyphicon glyphicon-trash" ng-show="$flow.files.length" ng-click="image.cancel()"></span>
<span class="btn glyphicon glyphicon-heart pull-right" ng-click="image.like()"></span>
</div>
</div>
</div>
</div>
我的控制器-到目前为止。。。
angular.module ( 'myApp' )
.controller (
'ProtectedCtrl', function ($localStorage, $scope)
{
var myImage = [];
$localStorage.myImage = document.getElementById('image-handle');
console.log($localStorage.myImage);
});
我可以选择图像并在页面上预览,当我检查页面时,图像src已转换为base64。从这一点开始,我被困在如何获得基本64字符串并存储它上
很抱歉收到新手帖子,如有任何提示或建议,我们将不胜感激。
提前感谢!
我最近出于同样的目的读了一篇文章,对图像执行此操作的一种方法是加载到画布元素中。然后,使用画布,您可以将画布中的当前视觉表示读取为数据URL。以下是的代码片段
// Get a reference to the image element
var elephant = document.getElementById("elephant");
// Take action when the image has loaded
elephant.addEventListener("load", function () {
var imgCanvas = document.createElement("canvas"),
imgContext = imgCanvas.getContext("2d");
// Make sure canvas is as big as the picture
imgCanvas.width = elephant.width;
imgCanvas.height = elephant.height;
// Draw image into canvas element
imgContext.drawImage(elephant, 0, 0, elephant.width, elephant.height);
// Get canvas contents as a data URL
var imgAsDataURL = imgCanvas.toDataURL("image/png");
// Save image into localStorage
try {
localStorage.setItem("elephant", imgAsDataURL);
}
catch (e) {
console.log("Storage failed: " + e);
}
}, false);
DataURL是一个base64字符串,因为localstorage不能直接存储图像,并且在localstorage中存储图像并不常见。也许我错了。然而,这里有一个链接将进一步帮助您https://hacks.mozilla.org/2012/02/saving-images-and-files-in-localstorage/