嗨,我有一个问题。当我覆盖现有 blob 时,我不能 清除缓存,以便显示以前的 blob 版本。这带来了一个 对用户来说体验不好。
显示新 blob 的最快方法(但也不是即时的)是通过链接 myaccount-secondary.blob.core.windows.net/mycontainer/miblob 存储帐户的访问密钥对于两个主帐户是相同的 和辅助终结点。
因为我不喜欢这个解决方案... 然后,尝试删除以前的 Blob,但继续缓存旧的 斑点。从上传时,我需要一些东西来擦除缓存 后端节点。
这是我的节点代码
var express = require('express')
var app = express()
var busboy = require('connect-busboy')
var azure = require('azure-storage')
var nconf = require('nconf');
nconf.env().file({ file: 'config.json', search: true });
var tableName = nconf.get("TABLE_NAME");
var partitionKey = nconf.get("PARTITION_KEY");
var accountName = nconf.get("STORAGE_NAME");
var accountKey = nconf.get("STORAGE_KEY");
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
//res.setHeader("Cache-Control", "public, max-age=01");
var _send = res.send;
var sent = false;
res.send = function(data){
if(sent) return;
_send.bind(res)(data);
sent = true;
};
next();
});
app.use(busboy())
app.use(express.static('public'))
app.get('/', function(req, res) {
res.sendFile('index.html')
})
app.post('/upload', function(req, res, params) {
req.pipe(req.busboy);
var name;
req.busboy.on('field', function (fieldname, val) {
name = val+'.jpg';
});
req.busboy.on('file', function(fieldname, file, filename) {
var blobSvc = azure.createBlobService(accountName, accountKey);
file.pipe(blobSvc.createWriteStreamToBlockBlob('images', name, function(error) {
if (!error) {
res.send(200, 'upload succeeded')
} else {
res.send(500, JSON.stringify(error))
}
}))
})
})
app.listen(process.env.PORT || 3201, function() {
console.log('Example app listening on port 3000!')
})
您的节点代码看起来不错。在我的测试中,如果 blob URL 保持不变,浏览器将缓存旧版本。因此,即使存储包含正确的图像,旧图像仍然显示。我想你也面临同样的问题。
为了防止它,您可以在前端尝试以下代码:
<img src="https://youraccount.blob.core.windows.net/mycontainer/miblob?" + Math.random() />
这将确保每个请求都是唯一的,因此您将始终获得最新的图像。
更多关于这个:
在同一 url 上用新图像刷新图像
禁用某些图像的缓存
为什么我看到图像的旧版本? - 清除浏览器缓存