我正在创建一个小网站,将图片上传到相册。对于我都有模特。为了便于阅读,我只需将应用程序命名为Website
。我的问题是,当删除相册时(以及删除用户时),我想从硬盘中删除文件。
defmodule Website.Picture do
use Website.Web, :model
use Arc.Ecto.Schema
schema "pictures" do
field :pic, Website.ImageUploader.Type
belongs_to :album, Website.Album
end
...
end
defmodule Website.Album do
use Website.Web, :model
schema "albums" do
has_many :pictures, Website.Album
end
...
end
通过调用图片控制器中ImageUploader的删除功能,我设法在直接删除图片时删除文件。
defmodule Website.PictureController do
...
def delete(...) do
# get picture and check that current user is the owner
...
# delete image from harddisk
Website.ImageUploader.delete({picture.pic, picture})
# then delete from DB
Repo.delete!(picture)
...
end
end
是否有一种简单的方法可以删除文件,例如在我的ImageUploader中或者可能来自模型?或者是通过迭代专辑的所有图片在控制器中完成它的唯一方法吗?
defmodule Website.ImageUploader do
use Arc.Definition
use Arc.Ecto.Definition
@version [:original]
def __storage, do: Arc.Storage.Local
end
要清理,这是我的迁移
专辑:
create table(:albums) do
# some fields
end
图片:
create table(:pictures) do
add :pic, :string
add :album_id, references(:albums, on_delete: :delete_all)
end