अनुरोध uri से केवल फ़ाइल नाम कैसे निकालें


11

मैं फ़ाइल के विस्तार के आधार पर अनुरोध uri को फिर से लिखने की कोशिश कर रहा हूं, फिर केवल फ़ाइल नाम को uri से निकालें और किसी अन्य फ़ोल्डर में संग्रहीत करें। यहां समस्या फ़ाइल नाम और उपलब्ध चर के लिए कोई पूर्वनिर्धारित चर नहीं है uri, request_uriऔर request_filenameपूर्ण यूरी देगा।

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;
       }
}

सबसे अच्छा मैं कर सकता हूँ, विस्तार .jpg या .gif हो रही है कि जब मैं डाल $1के स्थान पर $request_filenameइस तरह:

location @imgstore { 
    proxy_pass $file_folder$1;
}

इसलिए, मैं जानना चाहता हूं:

  1. अनुरोध से फ़ाइल का नाम कैसे प्राप्त करें?
  2. क्या यह फ़ोल्डर से दूसरे में छवियों को संग्रहीत करने का सही तरीका है?

जवाबों:


17

क्या आप मूल अनुरोध से या मौजूदा uri (किसी भी आंतरिक पुनर्निर्देशन के बाद) से फ़ाइल नाम चाहते हैं? वे मानचित्र मॉड्यूल का उपयोग कर दोनों संभव हैं :

# 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;
}

फिर जहां भी आपको आवश्यकता हो, बस $ request_basename या $ basename का उपयोग करें। ध्यान दें कि मानचित्रों को http {} संदर्भ में परिभाषित किया जाना चाहिए, जिससे वे सर्वर {} s के भाई-बहन बनते हैं।


मैं वर्तमान uri से फ़ाइल का नाम चाहता हूं, मुझे नहीं लगता कि मैप मॉड्यूल ऐसा दे सकता है, लेकिन मैं इसे
आज़माऊंगा

मैंने इसे पोस्ट करने से पहले स्थानीय रूप से परीक्षण किया, और वह दूसरा नक्शा काम करता है (जब तक आप 0.9.6+ का उपयोग कर रहे हैं)
kolbyjack

धन्यवाद, Kolbyjack, यह काम किया महान चाल, मैं फ़ाइल नाम और विस्तार मिला है।
जॉन्टा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.