<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic S3 Bucket in App Development</title>
    <link>https://community.qlik.com/t5/App-Development/S3-Bucket/m-p/2153622#M93450</link>
    <description>&lt;DIV&gt;Hi I am using the below code in Qliksense mash for access qliksense mashup&amp;nbsp; getting below error while reloading the app&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;html lang="en"&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;head&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;meta charset="UTF-8"&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;title&amp;gt;S3 File Downloader&amp;lt;/title&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;script src="&lt;A href="https://cdn.jsdelivr.net/npm/aws-sdk@2.1093.0/dist/aws-sdk.min.js" target="_blank" rel="noopener"&gt;https://cdn.jsdelivr.net/npm/aws-sdk@2.1099.0/dist/aws-sdk.min.js&lt;/A&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/head&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;body&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;label for="file-list"&amp;gt;Select File to Download:&amp;lt;/label&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;select id="file-list"&amp;gt;&amp;lt;/select&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;button onclick="downloadS3File()"&amp;gt;Download S3 File&amp;lt;/button&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;script&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;function myFunction() {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; // Initialize AWS SDK&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; AWS.config.update({&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; accessKeyId: 'Key',&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; secretAccessKey: '',&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; region: ''&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; const s3 = new AWS.S3();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; // Fetch file list from S3 and populate dropdown&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; s3.listObjectsV2({ Bucket: 'Bucketname' }, (err, data) =&amp;gt; {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (err) {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; console.error(err);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; } else {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; const fileList = document.getElementById('file-list');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; data.Contents.forEach(file =&amp;gt; {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const option = document.createElement('option');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; option.value = file.Key;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; option.textContent = file.Key;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fileList.appendChild(option);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; // Function to download S3 file dynamically&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; function downloadS3File() {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; const selectedFile = document.getElementById('file-list').value;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (!selectedFile) {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; console.error('Please select a file to download.');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; const params = {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Bucket: 'Bucket-Name',&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Key: selectedFile&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; };&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; s3.getObject(params, (err, data) =&amp;gt; {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (err) {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.error(err);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const blob = new Blob([data.Body], { type: data.ContentType });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const link = document.createElement('a');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link.href = URL.createObjectURL(blob);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link.download = ${selectedFile.split('/').pop()}.xlsx; // Adjust the downloaded file name&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.body.appendChild(link);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link.click();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.body.removeChild(link);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; console.log();&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/script&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/body&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/html&amp;gt;&lt;/DIV&gt;</description>
    <pubDate>Fri, 15 Dec 2023 15:07:23 GMT</pubDate>
    <dc:creator>Amudha</dc:creator>
    <dc:date>2023-12-15T15:07:23Z</dc:date>
    <item>
      <title>S3 Bucket</title>
      <link>https://community.qlik.com/t5/App-Development/S3-Bucket/m-p/2153622#M93450</link>
      <description>&lt;DIV&gt;Hi I am using the below code in Qliksense mash for access qliksense mashup&amp;nbsp; getting below error while reloading the app&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;html lang="en"&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;head&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;meta charset="UTF-8"&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;title&amp;gt;S3 File Downloader&amp;lt;/title&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;lt;script src="&lt;A href="https://cdn.jsdelivr.net/npm/aws-sdk@2.1093.0/dist/aws-sdk.min.js" target="_blank" rel="noopener"&gt;https://cdn.jsdelivr.net/npm/aws-sdk@2.1099.0/dist/aws-sdk.min.js&lt;/A&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/head&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;body&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;label for="file-list"&amp;gt;Select File to Download:&amp;lt;/label&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;select id="file-list"&amp;gt;&amp;lt;/select&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;button onclick="downloadS3File()"&amp;gt;Download S3 File&amp;lt;/button&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;script&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;function myFunction() {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; // Initialize AWS SDK&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; AWS.config.update({&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; accessKeyId: 'Key',&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; secretAccessKey: '',&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; region: ''&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; const s3 = new AWS.S3();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; // Fetch file list from S3 and populate dropdown&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; s3.listObjectsV2({ Bucket: 'Bucketname' }, (err, data) =&amp;gt; {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (err) {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; console.error(err);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; } else {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; const fileList = document.getElementById('file-list');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; data.Contents.forEach(file =&amp;gt; {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const option = document.createElement('option');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; option.value = file.Key;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; option.textContent = file.Key;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fileList.appendChild(option);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; // Function to download S3 file dynamically&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; function downloadS3File() {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; const selectedFile = document.getElementById('file-list').value;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if (!selectedFile) {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; console.error('Please select a file to download.');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; const params = {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Bucket: 'Bucket-Name',&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Key: selectedFile&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; };&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; s3.getObject(params, (err, data) =&amp;gt; {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (err) {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.error(err);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const blob = new Blob([data.Body], { type: data.ContentType });&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const link = document.createElement('a');&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link.href = URL.createObjectURL(blob);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link.download = ${selectedFile.split('/').pop()}.xlsx; // Adjust the downloaded file name&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.body.appendChild(link);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; link.click();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.body.removeChild(link);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; });&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; console.log();&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; }&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/script&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/body&amp;gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;lt;/html&amp;gt;&lt;/DIV&gt;</description>
      <pubDate>Fri, 15 Dec 2023 15:07:23 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/S3-Bucket/m-p/2153622#M93450</guid>
      <dc:creator>Amudha</dc:creator>
      <dc:date>2023-12-15T15:07:23Z</dc:date>
    </item>
    <item>
      <title>Re: S3 Bucket</title>
      <link>https://community.qlik.com/t5/App-Development/S3-Bucket/m-p/2156460#M93663</link>
      <description>&lt;P&gt;may be below links will help you to debug your error.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Response-to-preflight-request-doesn-t-pass-access/ta-p/1716584" target="_blank"&gt;https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Response-to-preflight-request-doesn-t-pass-access/ta-p/1716584&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.qlik.com/t5/Official-Support-Articles/Mixed-Content-and-CORS-error-for-Access-Control-Allow-Origin/ta-p/1715904" target="_blank"&gt;https://community.qlik.com/t5/Official-Support-Articles/Mixed-Content-and-CORS-error-for-Access-Control-Allow-Origin/ta-p/1715904&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Dec 2023 16:15:50 GMT</pubDate>
      <guid>https://community.qlik.com/t5/App-Development/S3-Bucket/m-p/2156460#M93663</guid>
      <dc:creator>anat</dc:creator>
      <dc:date>2023-12-27T16:15:50Z</dc:date>
    </item>
  </channel>
</rss>

