সি কীভাবে সমাধান করবেন: \ ভুয়াপথ?


256
<input type="file" id="file-id" name="file_name" onchange="theimage();">

এটি আমার আপলোড বোতাম।

<input type="text" name="file_path" id="file-path">

এটি সেই পাঠ্য ক্ষেত্র যেখানে আমাকে ফাইলটির পুরো পথটি দেখাতে হবে।

function theimage(){
 var filename = document.getElementById('file-id').value;
 document.getElementById('file-path').value = filename;
 alert(filename);
}

এটি জাভাস্ক্রিপ্ট যা আমার সমস্যার সমাধান করে। কিন্তু সতর্কতা মান আমাকে দেয়

C:\fakepath\test.csv 

এবং মজিলা আমাকে দেয়:

test.csv

তবে আমি স্থানীয় সম্পূর্ণরূপে যোগ্যতাসম্পন্ন ফাইলের পথ চাই । এই সমস্যাটি কীভাবে সমাধান করবেন?

এটি যদি ব্রাউজার সুরক্ষা সমস্যার কারণে হয় তবে এটি করার বিকল্প উপায়টি কী হওয়া উচিত?


41
এটি ব্রাউজারটির সুরক্ষা বাস্তবায়ন - ব্রাউজারটি আপনাকে ডিস্কের কাঠামো অ্যাক্সেস করা থেকে রক্ষা করে। আপনি কেন পুরো পথটি চান তা যদি আপনি ব্যাখ্যা করতে পারেন তবে এটি সহায়তা করতে পারে।
স্টুয়ার্ট

1
পূর্ণ ইউআরএল বলতে কী বোঝ ? আপলোড করা ফাইলের ঠিকানা?
গোর

4
রেকর্ডের জন্য, আইই কেবল "ফেকপথ" বিট দেয় কারণ তারা এমন সার্ভারগুলি চায়নি যা "পাথ" ভাঙার পথ প্রত্যাশা করছিল। অন্যথায় সুরক্ষার কারণে অন্যান্য ব্রাউজারগুলির মতো আপনি কেবল ফাইলের নাম পাবেন (কোনও পথ নেই)। আরও গুরুত্বপূর্ণ, যদি আপনার দূষিত উদ্দেশ্য না থাকে তবে আমি বুঝতে পারি না যে কেন পথটি জেনে কিছু কার্যকর সরবরাহ করে।
স্ক্যানলিফ

2
browser security issue~ তার ব্রাউজারে বাস্তবায়িত করেন (ন্যায়ত তাই) তারপর, এটা অত্যন্ত অসম্ভাব্য আপনি এটা পাশকাটিয়ে করতে
রস

13
হ্যাঁ, আমি আমার সমস্ত ফাইল রাখি C:\fakepath, এখন সবাই আমার ডিরেক্টরি কাঠামোটি জানে knows
mbomb007

উত্তর:


173

কিছু ব্রাউজারে একটি সুরক্ষা বৈশিষ্ট্য রয়েছে যা জাভাস্ক্রিপ্টটিকে আপনার ফাইলের স্থানীয় সম্পূর্ণ পথ জানতে বাধা দেয়। এটি উপলব্ধি করে - ক্লায়েন্ট হিসাবে আপনি সার্ভারটি আপনার স্থানীয় মেশিনের ফাইল সিস্টেমটি জানতে চান না। সমস্ত ব্রাউজার যদি এটি করে তবে এটি দুর্দান্ত হবে।


9
যদি ব্রাউজারটি স্থানীয় ফাইলের পথটি না পাঠায় তবে এটি খুঁজে পাওয়ার কোনও উপায় নেই।
পেটারি হায়াতিবার্তা

47
কেবল ফর্মটি পোস্ট করুন: ব্রাউজারটি আপলোডের যত্ন নেবে। আপনার ওয়েবসাইটটি ক্লায়েন্টের পুরো পথটি জানতে হবে না।
রুপ

2
@ আরআরএফপি আপনি কেবল একটি পোস্ট দিয়ে আপলোড করতে পারেন যাতে আপলোডটি কোনও ফর্মের মধ্যে রেখে তা জমা দিতে হবে। এটি ফাইলটি চয়ন করতে এখনও একটি স্ট্যান্ডার্ড ফাইল আপলোড নিয়ন্ত্রণ ব্যবহার করবে এবং আপনার এখনও সম্পূর্ণ ক্লায়েন্ট ফাইল নাম প্রয়োজন হবে না।
রূপ

6
আমার সন্দেহ হয় যে কোনও সাধারণ ওয়েবসাইট ফ্লাশ বা জাভা এর মতো কোনও বিশ্বস্ত প্লাগইন ছাড়াই আপনার স্থানীয় মেশিনে কিছুটা দূষিত করতে পারে। এটি আরও বেশি গোপনীয়তার বিষয়। উদাহরণস্বরূপ, যদি আপনি আপনার ডেস্কটপে থেকে এসেছো আপলোড, আপনি লেট করা চাই সার্ভার আপনার স্থানীয় মেশিন বা ডোমেইন (চালু আপনার ব্যবহারকারী নাম জানি c:\users\myname\desktopবা /Users/myname/Desktop/বা যাই হোক না কেন)। এটি এমন কোনও বিষয় নয় যা কোনও ওয়েবসভারের কোনও ব্যবসায় জেনে রাখে।
জো এনোস

8
গোপনীয়তা প্রায় সবসময় সুরক্ষা এবং দুর্বলতার সাথে সম্পর্কিত কারণ কারও বিরুদ্ধে তথ্য ব্যবহার করা যেতে পারে। আক্রমণগুলি তাদের লক্ষ্য অর্জনের জন্য ঘন ঘন একাধিক সমস্যা কাজে লাগায়। বিপদগুলি স্বীকৃতি না দেওয়া যে কোনও ব্যক্তিকে কীভাবে বিড়ম্বনা করা ওয়ার্কশপ ছাড়াই হ্যালো ওয়ার্ল্ড ব্যতীত অন্য কোডের নিকটে অনুমতি দেওয়া উচিত নয়।
আর্কিমিডিক্স

70

ব্যবহার

document.getElementById("file-id").files[0].name; 

পরিবর্তে

document.getElementById('file-id').value

16
ক্রোম 44.0.2403.125 এ, এটি কেবল আপনাকে ফাইলের নাম সরবরাহ করে।
ফাঁক

4
তারপরে document.getElementById ("ফাইল-আইডি") ব্যবহার করুন "ফাইলগুলি [0] .path। আমার জন্য ভাল কাজ করে।
লোডারন

ধন্যবাদ @ লুডেরন আপনার উত্তর হিসাবে এটি পোস্ট করা উচিত!
7geeky

45

আমি onchangeআপনার ইনপুট ফাইল টাইপের জন্য ইনপুট ইভেন্টে অবজেক্ট ফাইলরেডার ব্যবহার করি ! এই উদাহরণটি readAsDataURL ফাংশনটি ব্যবহার করে এবং সেই কারণে আপনার একটি ট্যাগ থাকা উচিত। বাইনারি ডেটা পেতে ফাইলআরডার অবজেক্টে রিড এএসবাইনারি স্ট্রিং রয়েছে যা পরবর্তীতে আপনার সার্ভারে একই ফাইলটি তৈরি করতে ব্যবহার করা যেতে পারে

উদাহরণ:

var input = document.getElementById("inputFile");
var fReader = new FileReader();
fReader.readAsDataURL(input.files[0]);
fReader.onloadend = function(event){
    var img = document.getElementById("yourImgTag");
    img.src = event.target.result;
}

কোনও ধারণা কেন এমনকি এটি লোকালহোস্টে কাজ করছে না? উত্সটি src = "সি: \ নকলপথ \ filename.jpg" হিসাবে সেট হয়ে যায় তবে কনসোল.লগিং ইমেজ উপাদানটি বলে যে এসসিআর একটি ডেটাআরএল
গ্যালকি

উত্তর: ব্যাকবোন রিরেন্ডারিং: /
গালকি

1
এই এন্ট্রিটি কতটা হতাশার হাত থেকে বাঁচিয়েছে তা আপনার কোনও ধারণা নেই। এটি মোটামুটি একটি হীরা ... মাত্র 12 টি ভোট, তবে আরও অনেক কিছু পাওয়ার যোগ্য। আমি খুশী হয়ে আরও নীচের দিকে তাকালাম কারণ আরও উচ্চতর উত্সযুক্ত অন্যান্য এন্ট্রিগুলি কাজ করছে না এবং ফর্মডাটা () আমাদের উদ্দেশ্যগুলির জন্য কৌশলটি করবে না। সাবাশ!
ব্যবহারকারী 1585204

9
প্রশ্নটি ফাইলের সামগ্রীর জন্য নয়, ফাইলের পথের জন্য জিজ্ঞাসা করছে ।
কোয়ান্টিন

@ কুইন্টিন: হ্যাঁ আপনি ঠিক বলেছেন, তবে ওপি'র অভিপ্রায়টি পরিষ্কার হয়েছে যে কোনওভাবে সম্ভবত সার্ভারে ফাইলটি আপলোড করা সম্ভব হবে। সুতরাং এই সমাধানটি কার্যকরভাবে কার্যকর হবে সমস্ত লোকের জন্য যারা জেএস ব্যবহার করে কোনও সার্ভারে ফাইলগুলি আপলোড করার উপায় অনুসন্ধান করেন।
ব্যবহারকারী 18490

36

আপনি যদি ইন্টারনেট এক্সপ্লোরার, সরঞ্জাম, ইন্টারনেট বিকল্প, সুরক্ষা, কাস্টম যান, "কোনও সার্ভারে ফাইলগুলি আপলোড করার সময় স্থানীয় ডিরেক্টরি পথ অন্তর্ভুক্ত করুন" (এটি বেশ নিচে একটি উপায়) সন্ধান করুন এবং "সক্ষম করুন" এ ক্লিক করুন। এটি কাজ করবে


2
Chrome এর মতো কিছু আছে কি?
জ্যাভেন জেরেয়ান

11

আমি খুশি যে ব্রাউজারগুলি আমাদের চক্রান্তকারী স্ক্রিপ্টগুলি এবং এর মতো থেকে বাঁচাতে যত্ন করে। আইই ব্রাউজারে এমন কিছু দেয় যা খুশি হয় না যা একটি সাধারণ স্টাইল-ফিক্সটিকে হ্যাক-অ্যাটাকের মতো দেখায়!

আমি ফাইল-ইনপুট উপস্থাপনের জন্য একটি <স্প্যান> ব্যবহার করেছি যাতে আমি <ইনপুট> এর পরিবর্তে <বিভাজন> (আবার আই আই এর কারণে) উপযুক্ত স্টাইলিং প্রয়োগ করতে পারি। এখন এই আইই এর কারণে ব্যবহারকারীকে এমন একটি মান সহ একটি পথ দেখাতে চান যা কেবল তাদের রক্ষণাবেক্ষণের জন্য এবং খুব কম সংক্ষেপে (যদি তাদের পুরোপুরি ভয় না দেয় তবে!!) ... আরও আই-ক্রপ!

যাইহোক, যারা এখানে ব্যাখ্যা পোস্ট করেছেন তাদের জন্য ধন্যবাদ: আইই ব্রাউজার সুরক্ষা: ইনপুট [টাইপ = "ফাইল"] তে পথ দায়ের করতে "ফকিপাথ" যুক্ত করা হচ্ছে , আমি একটি ছোটখাট ফিক্সার-উপরের একসাথে রেখেছি ...

নীচের কোডটি দুটি কাজ করে - এটি একটি লেটি আইই 8 বাগটি সংশোধন করে যেখানে আপলোড ফিল্ডের অনুলার অবধি অনচেঞ্জ ইভেন্টটি চালিত হয় না এবং এটি ক্লিন করা ফাইলপথ সহ এমন একটি উপাদান আপডেট করে যা ব্যবহারকারীকে ভয় পায় না।

// self-calling lambda to for jQuery shorthand "$" namespace
(function($){
    // document onReady wrapper
    $().ready(function(){
        // check for the nefarious IE
        if($.browser.msie) {
            // capture the file input fields
            var fileInput = $('input[type="file"]');
            // add presentational <span> tags "underneath" all file input fields for styling
            fileInput.after(
                $(document.createElement('span')).addClass('file-underlay')
            );
            // bind onClick to get the file-path and update the style <div>
            fileInput.click(function(){
                // need to capture $(this) because setTimeout() is on the
                // Window keyword 'this' changes context in it
                var fileContext = $(this);
                // capture the timer as well as set setTimeout()
                // we use setTimeout() because IE pauses timers when a file dialog opens
                // in this manner we give ourselves a "pseudo-onChange" handler
                var ieBugTimeout = setTimeout(function(){
                    // set vars
                    var filePath     = fileContext.val(),
                        fileUnderlay = fileContext.siblings('.file-underlay');
                    // check for IE's lovely security speil
                    if(filePath.match(/fakepath/)) {
                        // update the file-path text using case-insensitive regex
                        filePath = filePath.replace(/C:\\fakepath\\/i, '');
                    }
                    // update the text in the file-underlay <span>
                    fileUnderlay.text(filePath);
                    // clear the timer var
                    clearTimeout(ieBugTimeout);
                }, 10);
            });
        }
    });
})(jQuery);

দয়া করে নোট করুন যে এটি আইই তে কাজ করে না; আমি নিম্নলিখিতগুলি প্রতিস্থাপন করেছি: filePath.substring (filePath.lastIndexOf ('\\')) + 1, filePath.length)
বাসেল Kh

6

আমি একই সমস্যা জুড়ে এসেছি। আইই 8-তে ফাইল ইনপুট নিয়ন্ত্রণের পরে একটি লুকানো ইনপুট তৈরি করে এটি কাজ করা যেতে পারে। এটি পূর্ববর্তী ভাইবোনটির মান দিয়ে পূরণ করুন। আইই 9 এ এটিও ঠিক করা হয়েছে।

পুরো পথটি জানতে ইচ্ছুক আমার কারণটি ছিল আপলোডের আগে জাভাস্ক্রিপ্ট চিত্রের পূর্বরূপ তৈরি করা। নির্বাচিত চিত্রটির পূর্বরূপ তৈরি করতে এখন আমাকে ফাইল আপলোড করতে হবে।


1
যদি কেউ আপলোডের আগে কোনও চিত্র দেখতে চায় তবে তারা এটি তাদের কম্পিউটারে দেখতে পারেন।
mbomb007

4

যদি আপনাকে সত্যিই আপলড ফাইলটির পুরো পথটি প্রেরণ করতে হয় তবে আপনাকে সম্ভবত একটি স্বাক্ষরিত জাভা অ্যাপলেট জাতীয় কিছু ব্যবহার করতে হবে কারণ ব্রাউজারটি এটি না পাঠালে এই তথ্য পাওয়ার কোনও উপায় নেই।


< "। কোন JPEG, .jpg, .png" ইনপুট টাইপ = "ফাইল" গ্রহণ =>। কিভাবে মূল পাথ fullpath আমি জাল পথ পেয়ে, কিভাবে এটা reslove করতে
গোবিন্দ শর্মা

1

মনে হচ্ছে আপনি জেএস দ্বারা লোকালহোস্টে পুরো পথটি খুঁজে পাচ্ছেন না, তবে আপনি কেবল ফাইলের নামটি দেখানোর জন্য ফেকপথটি গোপন করতে পারেন। পাথ ছাড়াই ফাইল ইনপুটটির নির্বাচিত ফাইলের নাম পেতে jQuery ব্যবহার করুন


1

ফাইল পাঠক ব্যবহার করুন:

$(document).ready(function() {
        $("#input-file").change(function() {
            var length = this.files.length;
            if (!length) {
                return false;
            }
            useImage(this);
        });
    });

    // Creating the function
    function useImage(img) {
        var file = img.files[0];
        var imagefile = file.type;
        var match = ["image/jpeg", "image/png", "image/jpg"];
        if (!((imagefile == match[0]) || (imagefile == match[1]) || (imagefile == match[2]))) {
            alert("Invalid File Extension");
        } else {
            var reader = new FileReader();
            reader.onload = imageIsLoaded;
            reader.readAsDataURL(img.files[0]);
        }

        function imageIsLoaded(e) {
            $('div.withBckImage').css({ 'background-image': "url(" + e.target.result + ")" });

        }
    }

-1

হ্যাঁ, আমার ক্ষেত্রে আমি এসপি নেটওয়ার ডেভলপমেন্ট এনভায়রনমেন্টটি ব্যবহার করছি, তাই আমি সেই ডেটাগুলি অ্যাসিঙ্ক্রোনাস এজ্যাক্স অনুরোধে আপলোড করতে চাইছিলাম, [ওয়েবমেথড] এ আপনি ফাইল আপলোডারকে ধরতে পারবেন না কারণ এটি স্থির উপাদান নয়, তাই আমাকে করতে হয়েছিল ডিবিতে সেভ করার জন্য ওয়ান্টেড ইমেজটি বাইটে রূপান্তরিত করার চেয়ে পাথ স্থির করে এই জাতীয় সমাধানের জন্য একটি টার্নওভার করুন।

এখানে আমার জাভাস্ক্রিপ্ট ফাংশন, আশা করি এটি আপনাকে সহায়তা করবে:

function FixPath(Path)
         {
             var HiddenPath = Path.toString();
             alert(HiddenPath.indexOf("FakePath"));

             if (HiddenPath.indexOf("FakePath") > 1)
             {
                 var UnwantedLength = HiddenPath.indexOf("FakePath") + 7;
                 MainStringLength = HiddenPath.length - UnwantedLength;
                 var thisArray =[];
                 var i = 0;
                 var FinalString= "";
                 while (i < MainStringLength)
                 {
                     thisArray[i] = HiddenPath[UnwantedLength + i + 1];
                     i++;
                 }
                 var j = 0;
                 while (j < MainStringLength-1)
                 {
                     if (thisArray[j] != ",")
                     {
                         FinalString += thisArray[j];
                     }
                     j++;
                 }
                 FinalString = "~" + FinalString;
                 alert(FinalString);
                 return FinalString;
             }
             else
             {
                 return HiddenPath;
             }
         }

এখানে কেবল পরীক্ষার জন্য:

 $(document).ready(function () {
             FixPath("hakounaMatata:/7ekmaTa3mahaLaziz/FakePath/EnsaLmadiLiYghiz");
         });
// this will give you : ~/EnsaLmadiLiYghiz

-3

সারਦੇਸ਼ শর্মার উত্তর ব্যবহারের পরিপূরক:

document.getElementById("file-id").files[0].path

পুরো পথের জন্য।


এটি undefinedফায়ারফক্স 75.0 এ আমার কাছে ফিরে আসে । pathআসলে কি আছে? এটি সম্পর্কে আপনার ডকুমেন্টেশনের কোনও রেফারেন্স আছে?
হোসে ম্যানুয়েল অ্যাবারকা রদ্রিগেজ

1
ওহে! আমি নিজেই সমস্যার সমাধান করার চেষ্টা করেছি এবং পথ ব্যবহার করে সফল হওয়ার পরে এই উত্তরটি পোস্ট করেছি। আমি কোন প্রকল্পে এটি চেষ্টা করেছিলাম তা মনে নেই তবে আমি সর্বদা গুগল ক্রোম ব্যবহার করি, সম্ভবত এই সমাধানটি কেবলমাত্র সেই ব্রাউজারের জন্যই উপযুক্ত। এবং এটি এমনকি ব্রাউজার আপডেটের কারণে অপ্রচলিত হয়ে থাকতে পারে। আরও সাহায্য করতে অক্ষম হওয়ার জন্য দুঃখিত: /
লোডারন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.