Elixir / Phoenix - 发送文件后从控制器操作中删除文件
Elixir / Phoenix - Deleting a file from a controller action after sending it
我有以下代码:
def show(conn) do
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> Plug.Conn.send_file(200, "tmp.png")
end
我试图在发送后删除 tmp.png
文件,但是如果我这样做了
def show(conn) do
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> Plug.Conn.send_file(200, "tmp.png")
File.rm("tmp.png")
end
我可以预见地被告知我必须 return 来自控制器的连接。
有什么办法可以在文件发送后删除文件吗?
提前致谢
您必须从 show/1
return conn
,所以这可能有效
def show(conn) do
conn =
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> Plug.Conn.send_file(200, "tmp.png")
File.rm("tmp.png")
halt(conn)
end
另一种最可能可靠的方法是生成一个单独的进程来删除文件。
defp send_and_remove_file(conn, file) do
conn = Plug.Conn.send_file(conn, 200, "tmp.png")
spawn(File, :rm, [file])
halt(conn)
end
def show(conn) do
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> send_and_remove_file("tmp.png")
end
我有以下代码:
def show(conn) do
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> Plug.Conn.send_file(200, "tmp.png")
end
我试图在发送后删除 tmp.png
文件,但是如果我这样做了
def show(conn) do
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> Plug.Conn.send_file(200, "tmp.png")
File.rm("tmp.png")
end
我可以预见地被告知我必须 return 来自控制器的连接。
有什么办法可以在文件发送后删除文件吗?
提前致谢
您必须从 show/1
return conn
,所以这可能有效
def show(conn) do
conn =
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> Plug.Conn.send_file(200, "tmp.png")
File.rm("tmp.png")
halt(conn)
end
另一种最可能可靠的方法是生成一个单独的进程来删除文件。
defp send_and_remove_file(conn, file) do
conn = Plug.Conn.send_file(conn, 200, "tmp.png")
spawn(File, :rm, [file])
halt(conn)
end
def show(conn) do
conn
|> put_resp_header("content-disposition", ~s(attachment; filename="tmp.png"))
|> send_and_remove_file("tmp.png")
end