fix(elixir): file upload in production
- move uploads to new directory (`./uploads` per default)
This commit is contained in:
@@ -614,7 +614,7 @@ defmodule ComponentsElixirWeb.ComponentsLive do
|
||||
<%= if @editing_component && @editing_component.image_filename do %>
|
||||
<div class="mt-1 mb-2">
|
||||
<p class="text-sm text-base-content/70">Current image:</p>
|
||||
<img src={"/user_generated/uploads/images/#{@editing_component.image_filename}"} alt="Current component" class="h-20 w-20 object-cover rounded-lg" />
|
||||
<img src={"/uploads/images/#{@editing_component.image_filename}"} alt="Current component" class="h-20 w-20 object-cover rounded-lg" />
|
||||
</div>
|
||||
<% end %>
|
||||
<div class="mt-1">
|
||||
@@ -680,8 +680,8 @@ defmodule ComponentsElixirWeb.ComponentsLive do
|
||||
<!-- Component Image -->
|
||||
<div class="flex-shrink-0 mr-4">
|
||||
<%= if component.image_filename do %>
|
||||
<button phx-click="show_image" phx-value-url={"/user_generated/uploads/images/#{component.image_filename}"} class="hover:opacity-75 transition-opacity">
|
||||
<img src={"/user_generated/uploads/images/#{component.image_filename}"} alt={component.name} class="h-12 w-12 rounded-lg object-cover cursor-pointer" />
|
||||
<button phx-click="show_image" phx-value-url={"/uploads/images/#{component.image_filename}"} class="hover:opacity-75 transition-opacity">
|
||||
<img src={"/uploads/images/#{component.image_filename}"} alt={component.name} class="h-12 w-12 rounded-lg object-cover cursor-pointer" />
|
||||
</button>
|
||||
<% else %>
|
||||
<div class="h-12 w-12 rounded-lg bg-base-200 flex items-center justify-center">
|
||||
@@ -867,33 +867,61 @@ defmodule ComponentsElixirWeb.ComponentsLive do
|
||||
|
||||
# Helper functions for image upload handling
|
||||
defp save_uploaded_image(socket, component_params) do
|
||||
IO.puts("=== DEBUG: Starting save_uploaded_image ===")
|
||||
IO.inspect(socket.assigns.uploads.image.entries, label: "Upload entries")
|
||||
|
||||
uploaded_files =
|
||||
consume_uploaded_entries(socket, :image, fn %{path: path}, entry ->
|
||||
filename = "#{System.unique_integer([:positive])}_#{entry.client_name}"
|
||||
dest = Path.join(["priv", "static", "user_generated", "uploads", "images", filename])
|
||||
uploads_dir = Application.get_env(:components_elixir, :uploads_dir)
|
||||
upload_dir = Path.join([uploads_dir, "images"])
|
||||
dest = Path.join(upload_dir, filename)
|
||||
|
||||
IO.puts("=== DEBUG: Processing upload ===")
|
||||
IO.puts("Filename: #{filename}")
|
||||
IO.puts("Upload dir: #{upload_dir}")
|
||||
IO.puts("Destination: #{dest}")
|
||||
|
||||
# Ensure the upload directory exists
|
||||
File.mkdir_p!(Path.dirname(dest))
|
||||
File.mkdir_p!(upload_dir)
|
||||
|
||||
# Copy the file
|
||||
case File.cp(path, dest) do
|
||||
:ok -> filename
|
||||
{:error, _reason} -> nil
|
||||
:ok ->
|
||||
IO.puts("=== DEBUG: File copy successful ===")
|
||||
{:ok, filename}
|
||||
{:error, reason} ->
|
||||
IO.puts("=== DEBUG: File copy failed: #{inspect(reason)} ===")
|
||||
{:postpone, {:error, reason}}
|
||||
end
|
||||
end)
|
||||
|
||||
case uploaded_files do
|
||||
[filename] when is_binary(filename) -> Map.put(component_params, "image_filename", filename)
|
||||
[] -> component_params
|
||||
_error -> component_params
|
||||
IO.inspect(uploaded_files, label: "Uploaded files result")
|
||||
|
||||
result = case uploaded_files do
|
||||
[filename] when is_binary(filename) ->
|
||||
IO.puts("=== DEBUG: Adding filename to params: #{filename} ===")
|
||||
Map.put(component_params, "image_filename", filename)
|
||||
[] ->
|
||||
IO.puts("=== DEBUG: No files uploaded ===")
|
||||
component_params
|
||||
_error ->
|
||||
IO.puts("=== DEBUG: Upload error ===")
|
||||
IO.inspect(uploaded_files, label: "Unexpected upload result")
|
||||
component_params
|
||||
end
|
||||
|
||||
IO.inspect(result, label: "Final component_params")
|
||||
IO.puts("=== DEBUG: End save_uploaded_image ===")
|
||||
result
|
||||
end
|
||||
|
||||
defp delete_image_file(nil), do: :ok
|
||||
defp delete_image_file(""), do: :ok
|
||||
|
||||
defp delete_image_file(filename) do
|
||||
path = Path.join(["priv", "static", "user_generated", "uploads", "images", filename])
|
||||
uploads_dir = Application.get_env(:components_elixir, :uploads_dir)
|
||||
path = Path.join([uploads_dir, "images", filename])
|
||||
File.rm(path)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user