blob

浅谈Azure Storage的安全性

不问归期 提交于 2020-01-24 00:33:33
在今天的博文中我们将讨论Azure Storage的安全性以及如何使用共享访问签名(SAS)和存储的访问策略来控制对容器和Blob的访问。SAS基本上是带有查询参数的URI,该查询参数指定诸如到期时间,权限和签名等选项。我将在本文后面详细介绍这些内容。请注意,共享访问签名也可以与表和队列一起使用,但是我将仅在Blob存储方面进行讨论 什么是共享访问签名(SAS) 共享访问签名(SAS)是URI,它允许使用者在指定时间范围具有访问存储资源(例如blob或容器)所允许的权限。时间跨度和权限可以从存储的访问策略中得出,也可以在URI中指定。 可能有得朋友看到这里会提出我使用存储账户密钥就可以了,为什么要使用此功能?因为这允许客户端在不知道我们存储账户密钥的情况下访问存储帐户中的容器和Blob。从安全的角度考虑,如果将存储帐户密钥放在客户端应用程序中,则它可能会遭到******,并且可能会被他人窃取和使用,甚至会用感染了病毒的文件替换正常的文件。使用存储帐户密钥,对存储帐户的访问没有限制。在企业中的实际环境中,无限访问可能不是我们想看到的权限控制场景。 默认的容器权限 在控制对Blob存储的访问时,首先要使用容器权限。可以将blob存储中每个容器的权限设置为如下权限之一: Private:禁止公众访问Blob或容器 Blob:Blob的公共读取权限 Container

备份SQL Server数据库到Azure Storage

。_饼干妹妹 提交于 2020-01-24 00:26:00
对于生产数据来讲,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的的后果。而备份作为数据的副本,可以在当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点。 对于传统的备份来讲,一般都是使用数据库自带的备份或使用第三方的备份软件将数据库备份到本地的磁盘/磁带存储,这种备份方式的前提是需要有一个大的存储池用来按照备份文件的生命周期来存储我们的备份文件。这就意味着我们需要准备一个大的存储池。考虑到准备存储池需要一定得资源,那么很多小伙伴肯定就会问了,我能否将数据库备份到云?答案是可以得。那么接下来我们就一起来聊聊如何将SQL Server数据库备份到云端和备份到云端所带来的好处。 将数据库备份到azure storage的好处如下: 灵活、可靠、无限制的站点外存储:在 Microsoft Azure Blob 服务上存储备份是一种既便捷灵活又易于访问的站点外存储方法。 为SQL Server 备份创建站点外存储就像修改现有脚本/作业一样简单。 站点外存储位置通常应远离生产数据库位置,以防止出现同时影响站点外和生产数据库位置的一个灾难。 通过选择地理复制 Blob 存储区,在发生可能影响整个区域的灾难时多了一层额外的保护。 此外,备份副本随时随地可用,并可以轻松访问它们来执行还原。 备份存档:在对备份进行存档时,Microsoft

What is the best way to read binary image from blob SQLite and decode it using OpenCV imdecode?

微笑、不失礼 提交于 2020-01-23 18:28:29
问题 I'm storing and reading image files from SQLite database in C++, the storing is working fine, but I have failed reading and converting the bytes to OpenCV cv::Mat using imdecode. Here is my code: std::vector<cv::Mat> images; std::vector<string> names; std::vector<int> ids; sqlite3 *db; if (sqlite3_open("fr.db", &db) != SQLITE_OK) { printf("Open database failed\n"); return 0; } sqlite3_stmt *statement; const char* sql = "SELECT * FROM Friends"; if (sqlite3_prepare_v2(db, sql, strlen(sql),

What is the best way to read binary image from blob SQLite and decode it using OpenCV imdecode?

会有一股神秘感。 提交于 2020-01-23 18:28:11
问题 I'm storing and reading image files from SQLite database in C++, the storing is working fine, but I have failed reading and converting the bytes to OpenCV cv::Mat using imdecode. Here is my code: std::vector<cv::Mat> images; std::vector<string> names; std::vector<int> ids; sqlite3 *db; if (sqlite3_open("fr.db", &db) != SQLITE_OK) { printf("Open database failed\n"); return 0; } sqlite3_stmt *statement; const char* sql = "SELECT * FROM Friends"; if (sqlite3_prepare_v2(db, sql, strlen(sql),

前端本地文件操作与上传

本秂侑毒 提交于 2020-01-23 11:47:07
前端无法像原生APP一样直接操作本地文件,否则的话打开个网页就能把用户电脑上的文件偷光了,所以需要通过用户触发,用户可通过以下三种方式操作触发: 通过input type="file" 选择本地文件 通过拖拽的方式把文件拖过来 在编辑框里面复制粘贴 第一种是最常用的手段,通常还会自定义一个按钮,然后盖在它上面,因为type="file"的input不好改变样式。如下代码写一个选择控件,并放在form里面: <form> <input type="file" id="file-input" name="fileContent"> </form> 然后就可以用 FormData 获取整个表单的内容: $("#file-input").on("change", function() { console.log(`file name is ${this.value}`); let formData = new FormData(this.form); formData.append("fileName", this.value); console.log(formData); }); 把input的value和formData打印出来是这样的: 可以看到文件的路径是一个假的路径,也就是说在浏览器无法获取到文件的真实存放位置。同时FormData打印出来是一个空的Objet

文件切片上传 并且实现 暂停 和继续上传功能(断点上传)

只愿长相守 提交于 2020-01-23 07:50:18
利用 slice(start,end) 方法对文件进行区域式的一个切割,每一个小部分一小部分的传过去 后台接收 并且存储 继续和停止的判断就是最简单的页面变量来实现的定义全局的 这里我已经写的很简单了 但是还是有不足的地方 有需求大家下面留言提问 有bug 望大家改善也分享给我····差不多了该关电脑了····· html页面: <style type="text/css"> #result{ width:500px; height:30px; border:1px solid green; } #progress { width: 0%; height:100%; background:green; }</style><body><div id="result"><div id="progress"></div></div><input type="file" id="file"/><button id="bg_to">上传</button><button onclick="sendStop()">停止</button><button onclick="sendStart()">继续</button> </body> js里面主要是3部分的 <script type="text/javascript"> const BYTES_PER_CHUNK = 1024*1024; //

浏览器端将语音转换为URL格式的字符串(base64 位编码)

折月煮酒 提交于 2020-01-22 13:03:21
我们可以在浏览器端,通过调用 JS 原生的 API ,将语音转换为文字,实现语音输入的效果。思路是: 录制一段音频; 将音频转换为 URL 格式的字符串( base64 位编码); 调用讯飞开放接口,将 base64 位编码转换为文本。 这篇文章实现前两步,将音频转换为 URL 格式的字符串( base64 位编码)。 这里将会用到于媒体录制相关的诸多 API ,先将其列出: MediaDevices ( MediaDevices 使用方法 ) MediaDevices 接口提供访问连接媒体输入的设备,如照相机和麦克风,以及屏幕共享等。 MediaDevices.getUserMedia() 会提示用户给予使用媒体输入的许可。 我们将要访问浏览器的麦克风。若浏览器支持 getUserMedia ,就可以访问麦克风权限。 MediaDevices.getUserMedia() ,返回一个 Promise 对象,获得麦克风许可后,会 resolve 回调一个 MediaStream 对象。 MediaStream 包含音频轨道的输入。 MediaRecorder ( MediaRecorder 使用方法 ) MediaRecorder() 构造函数会创建一个对指定的 MediaStream 进行录制的 MediaRecorder 对象。 MediaStream 是将要录制的流.

Generate an image of a div and Save as

喜欢而已 提交于 2020-01-22 09:30:29
问题 I'd like to create an input button "Save image" that : take a screen shot of a div ask to "Save as" on the user's computer I've found how to create a screen of a dive using html2canvas and to open it in a new tab, it works perfectly : function printDiv2(div) { html2canvas((div), { onrendered: function(canvas) { var img = canvas.toDataURL(); window.open(img); } }); } But for thee Save as part, is a kind of the tough part... I've found interesting topics, as I'm new in JS (and object) coding, I

Generate an image of a div and Save as

我们两清 提交于 2020-01-22 09:29:54
问题 I'd like to create an input button "Save image" that : take a screen shot of a div ask to "Save as" on the user's computer I've found how to create a screen of a dive using html2canvas and to open it in a new tab, it works perfectly : function printDiv2(div) { html2canvas((div), { onrendered: function(canvas) { var img = canvas.toDataURL(); window.open(img); } }); } But for thee Save as part, is a kind of the tough part... I've found interesting topics, as I'm new in JS (and object) coding, I

js 下载 文件

时光毁灭记忆、已成空白 提交于 2020-01-22 00:39:11
创建upload.js 文件 /** * 获取 blob * @param {String} url 目标文件地址 * @return {Promise} */ function getBlob(url) { return new Promise(resolve => { const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = () => { if (xhr.status === 200) { resolve(xhr.response); } }; xhr.send(); }); } /** * 保存 * @param {Blob} blob * @param {String} filename 想要保存的文件名称 */ function saveAs(blob, filename) { if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, filename); } else { const link = document.createElement('a'); const body = document.querySelector('body');