Cách giải nén Chỉ tên tệp từ yêu cầu uri


11

Tôi đang cố gắng viết lại uri yêu cầu tùy thuộc vào phần mở rộng của tệp, sau đó chỉ trích xuất tên tệp từ uri và lưu trữ nó trong một thư mục khác. Vấn đề ở đây là không có biến được xác định trước cho tên tệp và các biến có sẵn uri, request_urirequest_filenamesẽ cung cấp đầy đủ uri.

server{

        set $file_folder D:/nginx-1.0.15/imageAll/;  

        location ~*+.(gif|jpg)$ { 
            try_files $uri @imgstore;
        }

        location @imgstore { 
            proxy_pass $file_folder$request_filename;
            proxy_store on;
            proxy_temp_path /nginx-1.0.15/images/;
            proxy_store_access  user:rw  group:rw  all:r;
       }
}

điều tốt nhất tôi có thể làm là nhận phần mở rộng .jpg hoặc .gif, khi tôi đặt $1vào vị trí $request_filenamenhư thế này:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Vì vậy, tôi muốn biết:

  1. Làm thế nào để có được tên tập tin từ yêu cầu?
  2. Đây có phải là cách đúng đắn để lưu trữ hình ảnh từ thư mục này sang thư mục khác?

Câu trả lời:


17

Bạn có muốn tên tệp từ yêu cầu ban đầu hoặc từ uri hiện tại (sau bất kỳ chuyển hướng nội bộ nào) không? Cả hai đều có thể sử dụng mô-đun bản đồ :

# Gets the basename of the original request
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

# Gets the basename of the current uri
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}

Sau đó, chỉ cần sử dụng $ request_basename hoặc $ basename bất cứ nơi nào bạn cần chúng. Lưu ý rằng các bản đồ phải được xác định trong bối cảnh http {}, biến chúng thành anh em của máy chủ {} s.


Tôi muốn tên tệp từ uri hiện tại, tôi không nghĩ mô-đun bản đồ có thể cung cấp cho điều đó nhưng tôi sẽ thử nó,
Johnta

Tôi đã kiểm tra nó cục bộ trước khi đăng và bản đồ thứ hai hoạt động (miễn là bạn đang sử dụng 0.9.6+)
kolbyjack

Cảm ơn Kolbyjack, thủ thuật tuyệt vời đã thực hiện công việc, tôi đã nhận được tên tệp và phần mở rộng.
Johnta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.