$lang['tuto'] = "பயிற்சிகள்"; ?> ESP32 Webserver இலிருந்து JavaScript

ESP32 Webserver இலிருந்து JavaScript கோப்புப் பதிவிறக்கச் சிக்கல்களைத் தீர்க்கிறது

Temp mail SuperHeros
ESP32 Webserver இலிருந்து JavaScript கோப்புப் பதிவிறக்கச் சிக்கல்களைத் தீர்க்கிறது
ESP32 Webserver இலிருந்து JavaScript கோப்புப் பதிவிறக்கச் சிக்கல்களைத் தீர்க்கிறது

ESP32 உடன் ஜாவாஸ்கிரிப்ட் கோப்பு பதிவிறக்க சிக்கல்களைப் புரிந்துகொள்வது

வெப்சர்வரிலிருந்து கோப்புகளைப் பதிவிறக்குவது சில நேரங்களில் தந்திரமானதாக இருக்கலாம், குறிப்பாக ESP32 போன்ற மைக்ரோகண்ட்ரோலர்களைக் கையாளும் போது. ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி கோப்பைப் பதிவிறக்க முயற்சிக்கும்போது, ​​உலாவியில் இருந்து நேரடியாக அணுகும்போது பதிவிறக்கம் சரியாக வேலை செய்யும் ஆனால் ஸ்கிரிப்ட் மூலம் தொடங்கும் போது தோல்வியடையும் சந்தர்ப்பங்கள் இருக்கலாம்.

இந்தச் சூழ்நிலையில், ESP32 ஆனது PsychicHTTP வெப்சர்வரைப் பயன்படுத்தி நிலையான .CSV கோப்பை வழங்குகிறது. உலாவியில் நேரடி HTML இணைப்பு மூலம் அணுகக்கூடியதாக இருந்தாலும், கோப்பு JavaScript மூலம் பதிவிறக்கம் செய்யாதபோது சிக்கல் எழுகிறது. இந்த சிக்கல் வெறுப்பாக இருக்கலாம், ஆனால் உட்பொதிக்கப்பட்ட அமைப்புகளுடன் பணிபுரியும் போது இது ஒரு பொதுவான ஒன்றாகும்.

ஜாவாஸ்கிரிப்ட் குறியீடு ESP32 இலிருந்து கோப்பைக் கோர XMLHttpRequest ஐப் பயன்படுத்துகிறது, ஆனால் எதிர்பார்த்தபடி அது பதிவிறக்கத்தைத் தூண்டாது. நேரடி இணைப்பு ஏன் வேலை செய்கிறது ஆனால் ஜாவாஸ்கிரிப்ட் முறை ஏன் செயல்படவில்லை என்பதை இந்தக் கட்டுரை ஆராயும். இந்தச் சிக்கலைத் தீர்க்க நவீன 'fetch' API ஐப் பயன்படுத்தி JavaScript ஐ எவ்வாறு மாற்றுவது என்பது பற்றிய நுண்ணறிவுகளையும் இது வழங்கும்.

மேலும், XMLHttpRequest இலிருந்து பெறுதல் API க்கு மாறும்போது ESP32 குறியீட்டில் மாற்றங்கள் தேவையா என்று விவாதிப்போம். இந்த இரண்டு கேள்விகளை ஆராய்வதன் மூலம், அடிப்படைச் சிக்கலைக் கண்டறிந்து, நம்பகமான கோப்பு பதிவிறக்கங்களுக்கான தீர்வுகளை வழங்குவோம்.

கட்டளை பயன்பாட்டின் உதாரணம்
fetch() வழங்கப்பட்ட URL க்கு HTTP கோரிக்கையைத் தொடங்க இந்த முறை பயன்படுத்தப்படுகிறது. எங்கள் விஷயத்தில், இது ESP32 வெப்சர்வரில் இருந்து கோப்பை மீட்டெடுக்கிறது மற்றும் அதை ஒரு குமிழியாக செயலாக்குகிறது. இது XMLHttpRequest இன் நவீன மாற்றாகும் மற்றும் சிறந்த ஒத்திசைவற்ற கையாளுதலுக்கான வாக்குறுதிகளை ஆதரிக்கிறது.
blob() fetch(), blob() இலிருந்து பதிலைப் பெற்ற பிறகு, பதில் தரவை பைனரி பெரிய பொருள்களாக (blobs) மாற்றுகிறது. CSVகள் போன்ற கோப்புகளைக் கையாளும் போது இது மிகவும் முக்கியமானது, அவை பதிவிறக்கங்களுக்கான பைனரி தரவுகளாக செயலாக்கப்பட வேண்டும்.
URL.createObjectURL() இந்த முறை ஒரு URL ஐ உருவாக்குகிறது, இது குமிழ் தரவைக் குறிக்கிறது. ப்ளாப் பதிலில் இருந்து கோப்பு பதிவிறக்கத்தைத் தூண்டுவதற்கு உலாவிக்கான தற்காலிக இணைப்பை உருவாக்க இது இங்கே பயன்படுத்தப்படுகிறது.
URL.revokeObjectURL() URL.createObjectURL() ஆல் உருவாக்கப்பட்ட URL ஐ வெளியிட இந்தக் கட்டளை பயன்படுத்தப்படுகிறது. கோப்பு பதிவிறக்கம் செய்யப்பட்டவுடன், தற்காலிக இணைப்பு இனி தேவைப்படாது, மேலும் ஆதாரங்களை விடுவிக்க அது திரும்பப் பெறப்பட வேண்டும்.
responseType = 'blob' XMLHttpRequest எடுத்துக்காட்டில் பயன்படுத்தப்பட்டது, இது கோரிக்கையின் எதிர்பார்க்கப்படும் மறுமொழி வகையை ப்ளாப்பில் அமைக்கிறது. இது சர்வர் பதிலை சாதாரண உரை அல்லது JSONக்கு பதிலாக ஒரு கோப்பாகக் கருத அனுமதிக்கிறது.
document.createElement('a') இந்த JavaScript கட்டளையானது DOM இல் ஒரு நங்கூரம் () உறுப்பை மாறும் வகையில் உருவாக்குகிறது. இந்த விஷயத்தில் இது மிகவும் அவசியமானது, ஏனெனில் இது ஏற்கனவே இருக்கும் HTML இணைப்பு தேவையில்லாமல் ஒரு கோப்பு பதிவிறக்கத்தை நிரல் ரீதியாக தூண்டுவதற்கு அனுமதிக்கிறது.
.download இணைப்பை உலாவியில் திறப்பதற்குப் பதிலாக ஒரு கோப்பைப் பதிவிறக்க வேண்டும் என்பதைக் குறிப்பிட, இந்த பண்பு நங்கூர உறுப்புக்கு பயன்படுத்தப்படுகிறது. பயனரின் கணினியில் சேமிக்கப்படும் கோப்பின் பெயரையும் இது வரையறுக்கிறது.
response.ok HTTP கோரிக்கை வெற்றியடைந்ததா என்பதைச் சரிபார்க்கும் ஒரு சொத்து (நிலை 200–299 வரம்பில் உள்ளது). கோரிக்கை செல்லுபடியாகும் பட்சத்தில் மட்டுமே கோப்பு பதிவிறக்கம் செய்யப்படுவதை உறுதிசெய்து, பிழை கையாளுதலுக்கு இது அவசியம்.
xhr.responseType பெறுதல் API ஐப் போலவே, இது XMLHttpRequest இல் எதிர்பார்க்கப்படும் தரவு வகையை வரையறுக்கிறது. அதை 'பிளாப்' என அமைப்பதன் மூலம், பதிலை பைனரி தரவுகளாகக் கருதலாம், இது உரை அல்லாத கோப்புகளை பதிவிறக்கம் செய்ய உதவுகிறது.

ஜாவாஸ்கிரிப்ட் கோப்பு பதிவிறக்க முறைகள் மற்றும் தீர்வுகளை பகுப்பாய்வு செய்தல்

வழங்கப்பட்ட எடுத்துக்காட்டுகளில், PsychicHTTP இயங்கும் ESP32 இணைய சேவையகத்திலிருந்து CSV கோப்பைப் பதிவிறக்குவதே இலக்காக இருந்தது. முதல் ஸ்கிரிப்ட் நவீனத்தைப் பயன்படுத்துகிறது API ஐப் பெறவும், ஜாவாஸ்கிரிப்டில் HTTP கோரிக்கைகளை உருவாக்குவதற்கான சக்திவாய்ந்த கருவி. இந்த முறை வாக்குறுதிகளைக் கையாள்வதன் மூலம் செயல்முறையை எளிதாக்குகிறது மற்றும் XMLHttpRequest போன்ற பழைய நுட்பங்களைக் காட்டிலும் படிக்கக்கூடியது. பெறுதல் கோரிக்கை ESP32 க்கு GET கோரிக்கையை அனுப்புகிறது, கோப்பை மீட்டெடுக்கிறது, பின்னர் அதை ஒரு ஆக மாற்றுகிறது பொட்டு வடிவம், இது CSV கோப்புகள் போன்ற பைனரி தரவைக் கையாளுவதற்கு அவசியம். ஒரு ஆங்கர் டேக் மூலம் கோப்பைப் பதிவிறக்க பயனர் அனுமதிக்க தற்காலிக URL உருவாக்கப்படுகிறது.

இரண்டாவது ஸ்கிரிப்ட் என்பது XMLHttpRequest ஐப் பயன்படுத்தும் ஒரு மாற்றாகும், இது HTTP கோரிக்கைகளை உருவாக்கும் மிகவும் பாரம்பரியமான வழியாகும். XMLHttpRequest பழையதாக இருந்தாலும், அது இன்னும் பல பயன்பாடுகளில் பயன்படுத்தப்படுகிறது. இந்த எடுத்துக்காட்டில், தி பதில் வகை சேவையகத்தால் திருப்பி அனுப்பப்படும் பைனரி கோப்பைக் கையாள 'blob' ஆக அமைக்கப்பட்டுள்ளது. ஸ்கிரிப்ட் பதிலைக் கேட்கிறது, மேலும் வெற்றிகரமாக திரும்பியவுடன், பதிவிறக்கத்தைத் தூண்டுவதற்கு இது ஒரு நங்கூர உறுப்பை மாறும் வகையில் உருவாக்குகிறது. இந்த முறை கோரிக்கையின் மீது கூடுதல் கட்டுப்பாட்டை வழங்குகிறது, ஆனால் இது Fetch API இன் எளிமை மற்றும் நெகிழ்வுத்தன்மையைக் கொண்டிருக்கவில்லை, குறிப்பாக வாக்குறுதிகளைக் கையாளும் போது.

மூன்றாவது தீர்வு, ஜாவாஸ்கிரிப்ட் தேவையில்லை. இது ஒரு HTML ஆங்கர் குறிச்சொல்லைப் பயன்படுத்துகிறது பதிவிறக்கம் பண்புக்கூறு, பயனர்கள் இணைப்பைக் கிளிக் செய்து தானாகவே கோப்பைப் பதிவிறக்க அனுமதிக்கிறது. இது மிக அடிப்படையான தீர்வு மற்றும் எந்த ஸ்கிரிப்டிங் தேவையில்லை. இருப்பினும், இது குறைவான நெகிழ்வானது, ஏனெனில் இது கோப்பு பதிவிறக்கங்களை நிரல்ரீதியாக கையாள அல்லது பதிவிறக்கத்தை தூண்டுவதற்கு முன் ஏதேனும் நிபந்தனைகள் அல்லது தர்க்கங்களைச் சேர்க்க உங்களை அனுமதிக்காது.

இந்த தீர்வுகள் ஒவ்வொன்றும் வெவ்வேறு பயன்பாட்டு வழக்கைக் குறிப்பிடுகின்றன. Fetch API என்பது அதன் எளிமை மற்றும் செயல்திறன் காரணமாக நவீன பயன்பாடுகளுக்கான பரிந்துரைக்கப்பட்ட தீர்வாகும். கோரிக்கை மற்றும் பதிலின் மீது உங்களுக்கு கூடுதல் கட்டுப்பாடு தேவைப்படும்போது XMLHttpRequest பயனுள்ளதாக இருக்கும். கடைசியாக, ஜாவாஸ்கிரிப்ட் தேவையில்லாத நிலையான அல்லது எளிமையான வலைப்பக்கங்களுக்கு HTML-மட்டும் தீர்வு சிறந்தது. இந்த முறைகளில் ஒன்றைச் செயல்படுத்துவதன் மூலம், பயனர் அனுபவம் மற்றும் செயல்பாடு இரண்டையும் மேம்படுத்தி, ESP32 இணையச் சேவையகத்திலிருந்து நம்பகமான கோப்புப் பதிவிறக்கங்களை உறுதிசெய்யலாம்.

தீர்வு 1: JavaScript இல் பதிவிறக்குவதற்கு Fetch API ஐப் பயன்படுத்துதல்

இந்த ஸ்கிரிப்ட் ESP32 இலிருந்து கோப்பைப் பதிவிறக்க நவீன Fetch API ஐப் பயன்படுத்துகிறது மற்றும் கோப்பு சேமிப்பிற்காக ப்ளாப் தரவைச் சரியாகக் கையாளுகிறது.

function downloadFile(url, fileName) {
  fetch(url, { method: 'GET', mode: 'cors' })
    .then(response => {
      if (!response.ok) {
        throw new Error('Network response was not ok');
      }
      return response.blob();
    })
    .then(blob => {
      const aElement = document.createElement('a');
      const objectUrl = URL.createObjectURL(blob);
      aElement.href = objectUrl;
      aElement.download = fileName;
      document.body.appendChild(aElement);
      aElement.click();
      URL.revokeObjectURL(objectUrl);
      document.body.removeChild(aElement);
    })
    .catch(error => console.error('Fetch error:', error));
}
downloadFile('http://192.168.0.136/saveFile', 'sample.csv');

தீர்வு 2: சிறந்த கையாளுதலுடன் XMLHttpRequest மாற்று

இந்த ஸ்கிரிப்ட் பதிலைச் சரியாகக் கையாள்வதன் மூலம் அசல் XMLHttpRequest குறியீட்டை மேம்படுத்துகிறது மற்றும் பதிவிறக்கத்தைத் தூண்டுவதற்கு ஒரு ஆங்கர் உறுப்பை உருவாக்குகிறது.

function saveFile() {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', '/saveFile', true);
  xhr.responseType = 'blob';
  xhr.onload = function () {
    if (xhr.status === 200) {
      var blob = xhr.response;
      var aElement = document.createElement('a');
      var url = URL.createObjectURL(blob);
      aElement.href = url;
      aElement.download = 'sample.csv';
      document.body.appendChild(aElement);
      aElement.click();
      URL.revokeObjectURL(url);
      document.body.removeChild(aElement);
    }
  };
  xhr.send();
}

தீர்வு 3: அடிப்படை HTML பதிவிறக்க பண்புக்கூறு முறை

இந்தத் தீர்வு, பதிவிறக்கப் பண்புடன் கூடிய எளிய HTML ஆங்கர் குறிச்சொல்லைப் பயன்படுத்துகிறது, இதற்கு ஜாவாஸ்கிரிப்ட் தேவையில்லை.

<a href="http://192.168.0.136/saveFile" download="sample.csv">Download CSV</a>

அலகு சோதனை: வெவ்வேறு உலாவிகளில் API சோதனையைப் பெறவும்

இந்த ஸ்கிரிப்ட் வெவ்வேறு சூழல்களில் பதிவிறக்குவதற்கான Fetch API முறையைச் சரிபார்க்க அடிப்படை அலகு சோதனைகளை உள்ளடக்கியது.

describe('Download File Test', function() {
  it('should successfully download a file using fetch', function(done) {
    const url = 'http://192.168.0.136/saveFile';
    fetch(url, { method: 'GET' })
      .then(response => {
        expect(response.ok).toBe(true);
        return response.blob();
      })
      .then(blob => {
        expect(blob.size).toBeGreaterThan(0);
        done();
      })
      .catch(done.fail);
  });
});

ஜாவாஸ்கிரிப்ட் மற்றும் HTML கோப்பு பதிவிறக்க முறைகளில் உள்ள வேறுபாடுகளை ஆராய்தல்

JavaScript மூலம் கோப்புகளைப் பதிவிறக்கும் போது, ​​உலாவியின் பாதுகாப்புக் கொள்கைகளுடன் வெவ்வேறு முறைகள் எவ்வாறு தொடர்பு கொள்கின்றன என்பதைப் புரிந்துகொள்வது அவசியம். நேரடி முகவரிப் பட்டி இணைப்பு செயல்படுவதற்கு ஒரு காரணம், உலாவி உடனடியாக கோரிக்கையைத் தீர்த்து பதிவிறக்கத்தைக் கையாள முடியும். இருப்பினும், ஜாவாஸ்கிரிப்ட் மூலம் இதை முயற்சிக்கும்போது, ​​சரியான தேவை போன்ற கடுமையான விதிகளை உலாவிகள் பயன்படுத்துகின்றன CORS (கிராஸ்-ஆரிஜின் ரிசோர்ஸ் ஷேரிங்) அமைப்புகள். அமைக்காமல் no-cors அல்லது கோர்கள் முறைகள் சரியாக இருந்தால், பதிவிறக்கம் நடக்காமல் போகலாம்.

கூடுதலாக, நவீன உலாவிகள் பயன்படுத்த விரும்புகின்றன fetch() போன்ற பழைய முறைகள் மீது ஏபிஐ XMLHttpRequest, பதில்கள் எவ்வாறு கையாளப்படுகின்றன என்பதில் கூடுதல் கட்டுப்பாட்டை வழங்குவதால், குறிப்பாக பொட்டு அல்லது கோப்பு போன்ற பொருள்கள். இது பிழைகளை மிகவும் அழகாகக் கையாளுகிறது, இது கோப்புகளை மாறும் வகையில் பதிவிறக்குவதற்கு மிகவும் நம்பகமான தீர்வாக அமைகிறது. சரியான MIME வகைகளை அமைப்பது, க்ளையன்ட் மூலம் கோப்பு சரியாக கையாளப்படுவதை உறுதி செய்வதற்கான மற்றொரு முக்கிய காரணியாகும்.

ஒரு இலிருந்து பதிவிறக்குவது போன்ற பயன்பாடுகளுக்கு ESP32, சேவையகம் கோரிக்கைகள் மற்றும் பதில்களைச் சரியாகக் கையாள்வதை உறுதிசெய்து, சரியான MIME வகைகள் மற்றும் தலைப்புகளை வழங்குவது மிகவும் முக்கியமானது. ஃபெட்ச் ஏபிஐ சிறந்த வாக்குறுதியைக் கையாளவும் அனுமதிக்கிறது, இது கோப்பு பதிவிறக்கம் போன்ற ஒத்திசைவற்ற சூழல்களில் பயனுள்ளதாக இருக்கும், பயனர் அனுபவம் சீராகவும் பதிலளிக்கக்கூடியதாகவும் இருப்பதை உறுதிசெய்கிறது.

ESP32 இலிருந்து JavaScript கோப்பு பதிவிறக்கங்கள் பற்றிய பொதுவான கேள்விகள்

  1. எனது பதிவிறக்கம் முகவரிப் பட்டியில் இருந்து ஏன் வேலை செய்கிறது ஆனால் ஜாவாஸ்கிரிப்டில் இல்லை?
  2. முகவரிப் பட்டியில் இருந்து நேரடிப் பதிவிறக்கங்கள் JavaScript மற்றும் CORS கொள்கைகளைத் தவிர்த்துவிடும். நீங்கள் சரியாகப் பயன்படுத்த வேண்டும் fetch() அல்லது XMLHttpRequest பதில்களை சரியாக கையாள JavaScript இல் உள்ள முறைகள்.
  3. XMLHttpRequest இல் Fetch API ஐப் பயன்படுத்துவதன் நன்மை என்ன?
  4. Fetch API ஆனது தூய்மையான தொடரியல், வாக்குறுதிகளை சிறப்பாகக் கையாளுதல் மற்றும் போன்ற முறைகள் மூலம் கோப்பு பதிவிறக்கங்களைக் கையாளும் போது மேம்பட்ட நெகிழ்வுத்தன்மையை வழங்குகிறது. response.blob().
  5. Fetch API வேலை செய்ய எனது சர்வர் அமைப்பை மாற்ற வேண்டுமா?
  6. இல்லை, ஆனால் சர்வர் சரியான தலைப்புகள் மற்றும் MIME வகைகளை அமைக்கிறது என்பதை உறுதிப்படுத்துகிறது (எ.கா., text/csv CSV கோப்புகளுக்கு) கிளையன்ட் பக்கத்தில் சரியான கையாளுதலுக்கு அவசியம்.
  7. ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி கோப்பு பதிவிறக்கத்தை எவ்வாறு தூண்டுவது?
  8. ஜாவாஸ்கிரிப்டில் ஒரு ஆங்கர் உறுப்பை உருவாக்கவும் document.createElement('a') முறை, ஒதுக்க download பண்புக்கூறு மற்றும் ஒரு கிளிக் நிகழ்வைத் தூண்டவும்.
  9. JavaScript ஐப் பயன்படுத்தாமல் கோப்புகளைப் பதிவிறக்க முடியுமா?
  10. ஆம், ஒரு எளிய HTML ஆங்கர் குறிச்சொல்லைப் பயன்படுத்துதல் download பண்புக்கூறு என்பது ஜாவாஸ்கிரிப்ட் குறியீடு இல்லாமல் கோப்பு பதிவிறக்கங்களை இயக்குவதற்கான எளிதான வழியாகும்.

ஜாவாஸ்கிரிப்ட் கோப்புப் பதிவிறக்கச் சிக்கல்கள் பற்றிய இறுதி எண்ணங்கள்

ஒரு ESP32 வெப்சர்வரில் இருந்து JavaScript கோப்புப் பதிவிறக்கச் சிக்கல்கள் பொதுவாக உலாவிகள் கோரிக்கைகள் மற்றும் பாதுகாப்புக் கொள்கைகளைக் கையாளும் விதத்தில் உள்ள வேறுபாடுகளால் எழுகின்றன. Fetch API அல்லது XMLHttpRequest ஐப் பயன்படுத்துவது இந்தப் பதிவிறக்கங்களின் மீது அதிகக் கட்டுப்பாட்டை அனுமதிக்கிறது, அவை சரியாகச் செயலாக்கப்படுவதை உறுதி செய்கிறது.

ESP32 வெப்சர்வரை சரியான MIME வகைகளுடன் உள்ளமைப்பது மற்றும் Fetch போன்ற நெகிழ்வான ஜாவாஸ்கிரிப்ட் முறையைப் பயன்படுத்துவது முக்கியம், இது சிறந்த பிழை கையாளுதல் மற்றும் வாக்குறுதிகளை வழங்குகிறது. சரியான அணுகுமுறையை செயல்படுத்துவதன் மூலம், டெவலப்பர்கள் உட்பொதிக்கப்பட்ட சூழலில் கோப்பு பதிவிறக்கங்களை எளிதாக நிர்வகிக்க முடியும்.

JavaScript கோப்புப் பதிவிறக்கச் சிக்கல்களுக்கான ஆதாரங்கள் மற்றும் குறிப்புகள்
  1. பயன்பாட்டை விளக்கப் பயன்படுத்தப்படும் உள்ளடக்க மூலத்தைப் பற்றி விரிவாகக் கூறுகிறது பெறு() மற்றும் ஜாவாஸ்கிரிப்டில் கோப்பு பதிவிறக்கங்களுக்கான XMLHttpRequest. மேலும் படிக்க, பார்வையிடவும் MDN Web Docs - Fetch API .
  2. ஒரு ESP32 சேவையகத்திலிருந்து கோப்பு பதிவிறக்கங்களைக் கையாள்வது பற்றிய கூடுதல் நுண்ணறிவை வழங்குகிறது லிட்டில்எஃப்எஸ் மற்றும் MIME வகைகள். மேலும் விவரங்களைக் காணலாம் ரேண்டம் நேர்ட் டுடோரியல்கள் - ESP32 Web Server .