【发布时间】:2016-02-23 05:15:05
【问题描述】:
我正在尝试创建一个新路由,允许用户下载他们上传的文件。我在“/”范围内创建了这条路线。
get "/media/:filepath", MediaFilesController, :download
目前,我只是尝试发送位于项目根目录下的文件夹uploads 中的图像。简而言之,如果有人试图访问/media/file.png,它将发送位于<project_folder>/uploads/file.png 的文件。这是它的代码:
defmodule App.MediaFilesController do
use App.Web, :controller
import Plug.Conn
@media_folder "/uploads"
def download(conn, %{"filepath" => filepath}) do
path = "#{System.cwd}/#{@media_folder}/#{filepath}"
{:ok, file} = File.open(path)
conn
|> put_resp_content_type("image/png")
|> send_file(200, file)
end
end
当我尝试加载 URL /media/file.png 时,我收到此错误:
[error] #PID<0.579.0> running App.Endpoint terminated Server: localhost:4000 (http) Request: GET /media/file.png
** (exit) an exception was raised:
** (FunctionClauseError) no function clause matching in Plug.Conn.send_file/5
我不明白为什么会出现此错误。 documentation 准确地说:
使用
Plug.Conn.send_file/5将其发回给客户。
为什么会出现这个错误?
【问题讨论】:
标签: controller elixir phoenix-framework