ফাইলটি jQuery বা খাঁটি জাভাস্ক্রিপ্টে বিদ্যমান কিনা তা আমি কীভাবে পরীক্ষা করব?


259

আমার সার্ভারে কোনও ফাইল jQuery বা খাঁটি জাভাস্ক্রিপ্টে আছে কিনা তা আমি কীভাবে চেক করব?

উত্তর:


433

JQuery সহ:

$.ajax({
    url:'http://www.example.com/somefile.ext',
    type:'HEAD',
    error: function()
    {
        //file not exists
    },
    success: function()
    {
        //file exists
    }
});

সম্পাদনা করুন:

এখানে jQuery ব্যবহার না করে 404 স্থিতি পরীক্ষা করার কোড is

function UrlExists(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

ছোট পরিবর্তন এবং এটি পরিবর্তে স্থিতি HTTP স্থিতি কোড 200 (সাফল্য) জন্য পরীক্ষা করতে পারে।

সম্পাদনা 2: যেহেতু সিঙ্ক এক্সএমএলএইচটিপিআরকোয়েস্টটি অবহিত করা হয়েছে, আপনি এটি ব্যবহারের মতো একটি ইউটিলিটি পদ্ধতি এ্যাসএনসি করতে এটি যুক্ত করতে পারেন:

function executeIfFileExist(src, callback) {
    var xhr = new XMLHttpRequest()
    xhr.onreadystatechange = function() {
        if (this.readyState === this.DONE) {
            callback()
        }
    }
    xhr.open('HEAD', src)
}

5
আপনার খাঁটি জাভাস্ক্রিপ্ট উদাহরণে OnReadyStateChangeHTTP_STATUS পরীক্ষা করার আগে আপনাকে বাধ্যতামূলক ইভেন্ট হওয়া উচিত ।
রবার্টপিট

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

75
@ পয়েন্ট হ'ল কারণ এটি আমাদের বাকী কিছুটা গুগলিংয়ের সমাধান করে
ইয়ান হান্টার

4
@ সিচি - এই ফাইলটি মেমরিতে লোড করে নাকি? আমি অস্তিত্বের জন্য যাচাই করতে চাইছি কিন্তু কোনও ফাইল লোড করছি না।
ব্রায়ান

11
মূল থ্রেডের সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকেস্টটি শেষ ব্যবহারকারীর অভিজ্ঞতার ক্ষতিকারক প্রভাবের কারণে হ্রাস পেয়েছে। আরও সহায়তার জন্য xhr.spec.whatwg.org (ব্রাউজারের মাধ্যমে এই সতর্কতা)
কুপেন্দ্র

71

একটি অনুরূপ এবং আরও আপ-টু-ডেট পদ্ধতির।

$.get(url)
    .done(function() { 
        // exists code 
    }).fail(function() { 
        // not exists code
    })

2
কেন এই আরও আপ টু ডেট আছে? $.ajaxএটি আরও পিছিয়ে সামঞ্জস্য হলে ভাল মনে হচ্ছে, তাই না?
টিম পিটারসন

15
aj .জ্যাক্স খুব কার্যকরভাবে কাজ করে তবে সাফল্য / ত্রুটি / সম্পূর্ণ ফাংশনগুলি প্রতিশ্রুতির পক্ষে, সম্পন্ন / ব্যর্থ / সর্বদা পদ্ধতিগুলির পক্ষে অবমূল্যায়ন করা হয়। এটি সম্পর্কে আরও পড়ুন এখানে api.jquery.com/jQuery.ajax । আমি এখানে আসার জন্য ব্যবহার করেছি কারণ আমরা কেবল একটি সরল লাভে আগ্রহী, তবে এটি $ .জ্যাক্স (just url: url, টাইপ করুন: 'GET'}) এর জন্য সংক্ষিপ্ত।
ম্যাথু জেমস ডেভিস

4
চিত্রটি বিদ্যমান না থাকলে কনসোল প্রতিধ্বনিত হয় 404 ত্রুটি। এটি সরানোর কোনও উপায় আছে কেননা আমার অ্যাপ্লিকেশনটি সর্বদা একটি চিত্রের অস্তিত্ব না থাকার প্রত্যাশা করে ...
ব্যবহারকারী 1534664

1
সম্ভব নয়, দেখুন: stackoverflow.com/a/16379746/1981050 । তবে এটি আপনার আচরণে বাধা সৃষ্টি করা উচিত নয়। এটি কেবল কিছু বহিরাগত লগিং উপার্জন করবে।
ম্যাথু জেমস ডেভিস

1
ক্রস অরিজিন সম্পর্কিত বিষয়গুলি এর সাথে সম্পর্কিত নয়
ম্যাথু জেমস ডেভিস

69

এটি আমার পক্ষে কাজ করে:

function ImageExist(url) 
{
   var img = new Image();
   img.src = url;
   return img.height != 0;
}

2
অন্য কিছু উত্তর তাদের ফাংশনের জন্য আরও ভাল, আমি এই উত্তরটি +1 করলাম কারণ এটি আমি যা খুঁজছিলাম। কেবল মনে রাখবেন, আপনি কন্টেন্টটি প্রথমে লোড না করলে আপনি সর্বদা শূন্য পাবেন! অর্থাত: উইন্ডো.এডএডএভেন্টলিস্টনার ('লোড', ফাংশন () {
স্পাইরাইল

আসলে, উইন্ডো লোড নিয়েও আমার এখনও সমস্যা ছিল with মনে হচ্ছে ছবিটি কোনওভাবে ক্যাশে না করা পর্যন্ত মাপা যায় না। যাইহোক, আমি পৃষ্ঠার প্রথমবারের লোডে আমার পক্ষে কাজ করি না। (যেমন: ব্যবহারকারী এই চিত্রটি আগে কখনও দেখেনি)। আপনার যদি আগের পৃষ্ঠায় ছবিটি থাকে তবে এটি আপনার পক্ষে কার্যকর হতে পারে ...
স্পাইরাইল

3
কারণ এটি চিত্রটির উত্স নির্ধারণ করে এবং চিত্রটির উচ্চতা দেখতে তাড়াতাড়ি যাচাই করা শেষ হয় যা এখনও ডাউনলোড করা শেষ হয়নি। এটি কাজ করার জন্য আপনাকে একটি লোড হ্যান্ডলার যুক্ত করতে হবে। এটি সঠিক কারণে নির্ভরযোগ্য পদ্ধতির নয় approach
দোয়াদওয়াদ

যদি আপনি তা মতো img.onload hanlder যোগ না কেন নির্ভরযোগ্য stackoverflow.com/a/12355031/988591 ?
jj_

3
প্রশ্নটি সম্পর্কে জিজ্ঞেস করে ফাইল , না একটি চিত্র! যদি URL টি বিদ্যমান থাকে এবং কোনও ফাইল না হয় তবে এর উচ্চতা 0 হবে!
Apostolos

44

আমি বিকল্প চিত্র যোগ করতে এই স্ক্রিপ্টটি ব্যবহার করেছি

function imgError()
{
alert('The image could not be loaded.');
}

এইচটিএমএল:

<img src="image.gif" onerror="imgError()" />

http://wap.w3schools.com/jsref/event_onerror.asp


24
দুর্দান্ত - তা জানতেন না। কোনও চিত্র উপস্থিত না থাকলে সংরক্ষণের বিকল্প সেট করতে আপনি নিম্নলিখিতটি করতে পারেন: <img src = "image.gif" onerror = "this.src = 'বিকল্প.gif'">
রিডকুলি

2
@ রিডকুলি আহ, তবে বিকল্প ব্যর্থ হলে কী হবে? তাহলে আপনি ঠিক একটি অন্তহীন লুপে আছেন?
rvighne

বিকল্পটি যদি ব্যর্থ হয় তবে আমি মনে করি সার্ভার সাইডে (বা প্রোগ্রামারটির দিকে: পি) আরও কিছু ভুল আছে
ইরেনোর পাজ

অন্তহীন লুপটি রোধ করতে Alt চিত্রটি সেট করার সময় আপনি সর্বদা img ট্যাগের অনার সেট করতে পারেন।
কিংঅফ হাইপোক্রিটিস

দুর্দান্ত কাজ স্যার। একটি যাদুমন্ত্র মত কাজ করে.
hiren

24

এতক্ষণ আপনি একই ডোমেনে ফাইল পরীক্ষা করে যাবেন এটি কাজ করা উচিত:

function fileExists(url) {
    if(url){
        var req = new XMLHttpRequest();
        req.open('GET', url, false);
        req.send();
        return req.status==200;
    } else {
        return false;
    }
}

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

এটি করার সর্বোত্তম উপায় হ'ল এই লাইনটি পরিবর্তন করা হবে: req.open('GET', url, false);থেকেreq.open('HEAD', url, false);


5
দুঃখিত, এটি কার্যকরভাবে গৃহীত উত্তর হিসাবে একই। আমাকে উপেক্ষা কর.
মোড

1
এটি নন-জিক্যুরি ফর্মের আরও কিছু বিশদ যা সহায়ক হতে পারে
টিম পিটারসন

@ মুব, এটি "গ্রহণযোগ্য উত্তর হিসাবে কার্যকরভাবে একই নয়", আপনি একটি জিইটি অনুরোধ প্রেরণ করছেন, যা হেড অনুরোধের চেয়ে আলাদা।
ইয়ামসালাত

async: false, ফায়ারফক্স সংস্করণ 30.0 এবং তারপরে সিঙ্ক্রোনাস অপারেশন এবং ক্রোমের সাম্প্রতিক / বর্তমান সংস্করণগুলিতে প্রতিকূল ব্যবহারকারীর অভিজ্ঞতার কারণে অবচয় করা হয়েছে। ব্যর্থ / ত্রুটিযুক্ত ব্যবহারের ফলাফলের চেষ্টা করা। async: trueঅ্যাসিক্রোনাস অপারেশনের জন্য কলব্যাক ফাংশন সহ ব্যবহার করা উচিত ।
কেভিন ফেগান 21

আরও জেএস চালিয়ে যাওয়ার আগে দয়া করে এই প্রতিক্রিয়ার জন্য অপেক্ষা করুন? ধন্যবাদ.
ভ্লাদানপ্রো

16

এই প্রশ্নের উত্তর চালানোর চেষ্টা করার সময় আমি ক্রস ডোমেন অনুমতি সংক্রান্ত সমস্যা পেয়েছিলাম তাই আমি এগুলি দিয়েছিলাম:

function UrlExists(url) {
$('<img src="'+ url +'">').load(function() {
    return true;
}).bind('error', function() {
    return false;
});
}

মনে হচ্ছে এটি দুর্দান্ত কাজ করছে, আশা করি এটি কারও সাহায্য করবে!


3
আমি মনে করি এটি বুলিয়ান মানগুলি হারাবে কারণ তারা কলব্যাকগুলি থেকে ফিরে পেয়েছে, না ইউরএলএক্সিস্ট ফাংশন।
মাইক্রব্রিজ

: এই কাজ না হয়, আপনি এই পড়া উচিত পারবেন stackoverflow.com/questions/14220321/...
Hacketo

ইউআরএলটি কেমন দেখাচ্ছে? , এক্সটেনশন সহ বা এক্সটেনশন ছাড়াই?
151291

10

এটি কীভাবে ES7 করা যায় তা এখানে আপনি যদি ব্যাবেল ট্রান্সপ্লার বা টাইপস্ক্রিপ্ট 2 ব্যবহার করেন:

async function isUrlFound(url) {
  try {
    const response = await fetch(url, {
      method: 'HEAD',
      cache: 'no-cache'
    });

    return response.status === 200;

  } catch(error) {
    // console.log(error);
    return false;
  }
}

তারপরে আপনার অন্যান্য ক্ষেত্রের অভ্যন্তরে async, আপনি সহজেই ইউআরএল উপস্থিত আছে কিনা তা যাচাই করতে পারেন:

const isValidUrl = await isUrlFound('http://www.example.com/somefile.ext');

console.log(isValidUrl); // true || false

5

আমি এই স্ক্রিপ্টটি কোনও ফাইল বিদ্যমান কিনা তা পরীক্ষা করতে ব্যবহার করি (এটি ক্রস উত্স সমস্যাটিও পরিচালনা করে):

$.ajax(url, {
       method: 'GET',
       dataType: 'jsonp'
         })
   .done(function(response) { 
        // exists code 
    }).fail(function(response) { 
        // doesnt exist
    })

নোট করুন যে ফাইলটি যাচাই করা হচ্ছে যখন JSON নেই তখন নিম্নলিখিত বাক্য গঠন ত্রুটি নিক্ষেপ করা হয়।

আনকচড সিনট্যাক্স এরর: অপ্রত্যাশিত টোকেন <


3

কোনও ফাইল রয়েছে কিনা তা দেখার জন্য একটি অ্যাসিঙ্ক কল হ'ল আরও ভাল পন্থা, কারণ এটি সার্ভারের প্রতিক্রিয়া অপেক্ষা করে ব্যবহারকারীর অভিজ্ঞতা হ্রাস করে না। যদি আপনি .openতৃতীয় প্যারামিটারটিকে মিথ্যাতে সেট করে কল করে থাকেন (যেমন উপরের অনেক উদাহরণে উদাহরণস্বরূপ http.open('HEAD', url, false);), এটি একটি সিঙ্ক্রোনাস কল এবং আপনি ব্রাউজার কনসোলে একটি সতর্কতা পান।

আরও ভাল পন্থা হ'ল:

function fetchStatus( address ) {
  var client = new XMLHttpRequest();
  client.onload = function() {
    // in case of network errors this might not give reliable results
    returnStatus( this.status );
  }
  client.open( "HEAD", address, true );
  client.send();
}

function returnStatus( status ) {
  if ( status === 200 ) {
    console.log( 'file exists!' );
  }
  else {
    console.log( 'file does not exist! status: ' + status );
  }
}

সূত্র: https://xhr.spec.hatwg.org/


আমি আপনার পদ্ধতির সাথে কনসোল লগে একটি সতর্কতা প্রতিক্রিয়াও পেয়েছি, কোনও ধারণা?
পিয়ের

এটি @ পিয়ারের মতো.opentrueclient.open("HEAD", address, true);
জিম বার্গম্যান

2

ক্লায়েন্ট কম্পিউটারের জন্য এটি অর্জন করা যেতে পারে:

try
{
  var myObject, f;
  myObject = new ActiveXObject("Scripting.FileSystemObject");
  f =   myObject.GetFile("C:\\img.txt");
  f.Move("E:\\jarvis\\Images\\");
}
catch(err)
{
  alert("file does not exist")
}

এটি একটি নির্দিষ্ট স্থানে কোনও ফাইল স্থানান্তর করার জন্য আমার প্রোগ্রাম এবং এটি উপস্থিত না থাকলে সতর্কতা দেখায়


1
আপনি যদি ফাইলসিস্টেমঅবজেক্ট ব্যবহার করতে যাচ্ছেন তবে ফাইলএক্সিস্টগুলি () পদ্ধতিটি ব্যবহার করা সহজ বলে মনে হচ্ছে। msdn.microsoft.com/en-us/library/aa265024(v=vs.60).aspx
মার্ক এফ গুয়েরা

2

ফাইল উপস্থিত আছে কিনা তা পরীক্ষা করতে জাভাস্ক্রিপ্ট ফাংশন:

function doesFileExist(urlToFile)
{
    var xhr = new XMLHttpRequest();
    xhr.open('HEAD', urlToFile, false);
    xhr.send();

    if (xhr.status == "404") {
        console.log("File doesn't exist");
        return false;
    } else {
        console.log("File exists");
        return true;
    }
}

1

প্রথমে ফাংশন তৈরি করে

$.UrlExists = function(url) {
	var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

নিম্নলিখিত ফাংশন ব্যবহার করার পরে

if($.UrlExists("urlimg")){
	foto = "img1.jpg";
}else{
	foto = "img2.jpg";
}

$('<img>').attr('src',foto);


আমি এখানে চেষ্টা করেছি কিন্তু কাজ করতে পারিনি। আমি কী মিস করছি?
চিতাবাহন

1

এটি স্বীকৃত উত্তরের সাথে অভিযোজন, তবে উত্তর থেকে আমার যা প্রয়োজন তা আমি পেতে পারি নি, এবং এটি কাজ হিসাবে এটি কাজ করে যাচাই করতে হয়েছিল, তাই আমি আমার সমাধানটি এখানে রাখছি।

আমাদের একটি স্থানীয় ফাইলের অস্তিত্ব যাচাই করা দরকার এবং কেবল ফাইল (পিডিএফ) এর অস্তিত্ব থাকলে তা খোলার অনুমতি দিন। যদি আপনি ওয়েবসাইটটির ইউআরএল বাদ দেন, ব্রাউজারটি স্বয়ংক্রিয়ভাবে হোস্টের নামটি নির্ধারণ করে - এটি লোকালহোস্ট এবং সার্ভারে কাজ করে:

$.ajax({

    url: 'YourFolderOnWebsite/' + SomeDynamicVariable + '.pdf',
    type: 'HEAD',
    error: function () {
        //file not exists
        alert('PDF does not exist');

    },
    success: function () {
        //file exists
        window.open('YourFolderOnWebsite/' + SomeDynamicVariable + '.pdf', "_blank", "fullscreen=yes");

    }
});

0

আপনাকে যা করতে হবে তা হ'ল চেকটি করার জন্য সার্ভারকে একটি অনুরোধ প্রেরণ করা, এবং তারপরে ফলাফলটি আপনাকে আপনার কাছে ফেরত পাঠানো।

আপনি কোন ধরনের সার্ভারের সাথে যোগাযোগের চেষ্টা করছেন? অনুরোধটির প্রতিক্রিয়া জানাতে আপনার একটি ছোট্ট পরিষেবা লিখতে হবে।


0

এটি ওপি-র প্রশ্নের সমাধান করে না, তবে যে কেউ ডাটাবেস থেকে ফলাফলগুলি ফিরিয়ে দিচ্ছে: আমি এখানে একটি সাধারণ পদ্ধতি ব্যবহার করেছি।

যদি ব্যবহারকারী কোনও অবতার আপলোড না করে তবে avatarক্ষেত্রটি হবে NULL, তাই আমি imgডিরেক্টরি থেকে একটি ডিফল্ট অবতার চিত্র সন্নিবেশ করতাম ।

function getAvatar(avatar) {
    if(avatar == null) {
        return '/img/avatar.jpg';
    } else {
        return '/avi/' + avatar;
    }
}

তারপর

<img src="' + getAvatar(data.user.avatar) + '" alt="">

0

এটি আমার পক্ষে কাজ করে, ব্রাউজারগুলিকে জিইটি ত্রুটি বার্তা দেখানোর জন্য অগ্রাহ্য করতে iframe ব্যবহার করুন

 var imgFrame = $('<iframe><img src="' + path + '" /></iframe>');
 if ($(imgFrame).find('img').attr('width') > 0) {
     // do something
 } else {
     // do something
 }

0

আমি এমন একটি ফাংশন চেয়েছিলাম যা একটি বুলিয়ান ফিরিয়ে দেবে, আমি ক্লোজার এবং অ্যাসিঙ্ক্রোনসিটি সম্পর্কিত সমস্যার মুখোমুখি হয়েছিল। আমি এইভাবে সমাধান করেছি:

checkFileExistence= function (file){
    result=false;
    jQuery.ajaxSetup({async:false});
    $.get(file)
        .done(function() {
           result=true;
        })
        .fail(function() {
           result=false;
        })
    jQuery.ajaxSetup({async:true});
    return(result);
},
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.