Ich versuche, eine hochgeladene Datei zu analysieren, wie folgt:Betrieb auf einer hochgeladenen Datei
lib/thingy_web/controllers/things_controller.ex
def create(conn, %{"data" => %Plug.Upload{content_type: "application/octet-stream", filename: basename, path: dirname}}) do
things_params = dirname <> "/" <> basename
|> File.stream!
|> NimbleCSV.RFC4180.parse_stream
|> Enum.map(&AllThings.create_things_params/1)
|> Enum.map(&AllThings.create_things/1)
conn
|> put_status(:created)
end
Allerdings, wenn ich versuche, eine POST mit einer Testdatei:
curl -F '[email protected]/root/test' http://localhost:4000/api/thing
Ich erhalte den Fehler:
[debug] Processing with ThingyWebWeb.ThingsController.create/2
Parameters: %{"data" => %Plug.Upload{content_type: "application/octet-stream", filename: "test", path: "/tmp/plug-1514/multipart-1514490176-65282591343221-1"}}
Pipelines: [:api]
[info] Sent 500 in 55ms
[error] #PID<0.544.0> running ThingyWeb.Endpoint terminated
Server: localhost:4000 (http)
Request: POST /api/thing
** (exit) an exception was raised:
** (File.Error) could not stream "/tmp/plug-1514/multipart-1514490176-65282591343221-1/test": not a directory
(elixir) lib/file/stream.ex:79: anonymous fn/2 in Enumerable.File.Stream.reduce/3
(elixir) lib/stream.ex:1270: anonymous fn/5 in Stream.resource/3
(elixir) lib/stream.ex:806: Stream.do_transform/8
Die nachträgliche Überprüfung von /tmp/plug-1514/
zeigt, dass es sich tatsächlich um ein leeres Verzeichnis handelt.
Ist die hochgeladene Datei kurzlebig und kann so konfiguriert werden, dass sie langlebig ist, oder fehlt mir hier überhaupt etwas?
Können Sie einfach den Wert von 'Pfad versuchen vorbei:' auf 'File.stream/1 '!? – Dogbert
Vielen Dank, dass es getan hat - re die fehlende Datei in '/ tmp/plug-1514 /', und 'h File.stream!/1' zeigt einen Dateipfad mit einem Basisnamen, darf ich fragen, wie das funktioniert? – category