【发布时间】:2019-08-08 19:50:23
【问题描述】:
我正在使用 Angular 7 设置 PWA。这是我的问题: 如果用户登录应用程序,他可以上传个人资料图片。图片会上传到 /assets 文件夹,由 service worker 缓存。
据我了解服务工作者,应用程序本身通过项目主文件夹中的文件名识别更新。如果文件名发生变化,Service Worker 将获得新版本。
也许您现在看到了问题:如果用户上传图片,则不会更改文件名,因为它不是来自 Angular 项目的更新。因此,用户会长时间看到他的“旧”个人资料图片,或者如果他刷新浏览器缓存。
我尝试使用 php 在 angular assets 文件夹中上传个人资料图片。这是正确的方法吗?
这段代码对我来说效果很好,但我不确定这是否是使用 PWA 保存图片的正确方法。我希望 Service Worker 缓存我的图片,但如果用户上传图片,我希望立即刷新。
$path = '../assets/img/profile_pictures/';
if (isset($_FILES['file'])) {
$originalName = $_FILES['file']['name'];
$ext = '.' . pathinfo($originalName, PATHINFO_EXTENSION);
$generatedName = $_POST['id'];
$filePath = $path . $generatedName . '.png';
if (!is_writable($path)) {
echo json_encode(array(
'status' => false,
'msg' => 'Destination directory not writable.'
));
exit;
}
if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath)) {
echo json_encode(array(
'status' => true,
'originalName' => $originalName,
'generatedName' => $generatedName
));
}
} else {
echo json_encode(
array('status' => false, 'msg' => 'No file uploaded.')
);
exit;
}
【问题讨论】:
-
为什么图片保存在apps文件夹目录而不是db?
-
我想我只是不知道存储图片的最佳做法是什么。前端文件系统(如 Angular 资产文件夹)、后端文件系统或在数据库中作为 blob。
标签: angular browser-cache angular-service-worker