You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原生JavaScript Web应用如何实时读取S3存储桶中的每日更新JSON文件

Hey there! Let's break down the simplest ways to read your daily-updated JSON file from S3 directly in your vanilla JavaScript web app—no Node.js, no manual downloads or GitHub reuploads needed.

最简易方案:原生fetch API(无需AWS SDK)

This is the perfect fit for your "simple solution" requirement. It lets you pull the latest JSON directly from S3 in real time, using nothing but browser-native JavaScript.

Step 1: Configure S3 CORS Rules

First, you need to set up CORS on your S3 bucket to allow requests from your web app's domain. Without this, browsers will block the cross-origin request.

Go to your S3 bucket's Permissions tab, find the "Cross-origin resource sharing (CORS)" section, and add a rule like this (replace https://your-web-app-domain.com with your actual domain, or use * temporarily for testing—though * is not recommended for production):

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://your-web-app-domain.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>

Step 2: Ensure File Accessibility

You have two options here:

  • Make the JSON file publicly readable: Go to the file in S3, open the Permissions tab, and set its ACL to "Grant public read access". The file will then have a public URL like https://your-bucket-name.s3.your-region.amazonaws.com/daily.json.
  • Use a pre-signed URL: If you don't want the file public, generate a time-limited pre-signed URL (you can do this via AWS CLI, Lambda, or your backend). This URL lets anyone with the link access the file until it expires—ideal for your daily-updated file (you can generate a new URL each day).

Step 3: Vanilla JavaScript Code

Use the fetch API to grab the JSON directly:

async function loadLatestS3Data() {
  try {
    // Replace with your public S3 URL or pre-signed URL
    const s3JsonUrl = "https://your-bucket.s3.your-region.amazonaws.com/daily.json";
    
    // Add `cache: 'no-cache'` to ensure you always get the latest file (bypasses browser cache)
    const response = await fetch(s3JsonUrl, { cache: 'no-cache' });
    
    if (!response.ok) {
      throw new Error(`Failed to fetch: ${response.status} ${response.statusText}`);
    }
    
    const jsonData = await response.json();
    // Do whatever you need with the data—render it, process it, etc.
    console.log("Latest daily data from S3:", jsonData);
    document.getElementById("data-display").textContent = JSON.stringify(jsonData, null, 2);
  } catch (error) {
    console.error("Error loading data from S3:", error);
  }
}

// Run when the page loads, or trigger it on a button click, etc.
window.addEventListener("load", loadLatestS3Data);

This code will fetch the latest version of your JSON file every time it runs—perfect for your daily-updated use case.

进阶方案:AWS SDK for JavaScript(适用于私有存储桶)

If your S3 bucket is private and you can't use public URLs/pre-signed URLs, you can use the browser version of the AWS SDK. This requires setting up authentication (like Amazon Cognito) to let your web app securely access S3.

Step 1: Include the SDK via CDN

Add this script tag to your HTML to load the AWS SDK:

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1300.0.min.js"></script>

You can use the latest version by checking AWS's SDK docs.

Step 2: Configure Authentication

Use Amazon Cognito Identity Pool to give your web app limited access to S3 (this is the most secure way for frontend apps):

// Configure AWS SDK with your region and Cognito Identity Pool ID
AWS.config.region = "your-region"; // e.g., us-east-1
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId: "your-cognito-identity-pool-id"
});

// Initialize S3 client
const s3 = new AWS.S3({
  apiVersion: "2006-03-01",
  params: { Bucket: "your-bucket-name" }
});

Make sure your Cognito Identity Pool has an IAM role that allows s3:GetObject on your daily JSON file.

Step 3: Fetch the File

async function getPrivateS3Data() {
  try {
    const params = {
      Key: "daily.json" // Path to your JSON file in the bucket
    };
    
    const response = await s3.getObject(params).promise();
    // Convert the S3 response body to JSON
    const jsonData = JSON.parse(response.Body.toString("utf-8"));
    
    console.log("Private S3 data loaded:", jsonData);
  } catch (error) {
    console.error("Error accessing private S3 data:", error);
  }
}

// Call the function when needed
getPrivateS3Data();

Final Recommendation

If you can make the JSON file public (or use pre-signed URLs), the fetch API method is by far the simplest—it's lightweight, uses only vanilla JS, and gives you real-time access to the latest file without any extra dependencies.

Only use the AWS SDK if you need to keep the bucket private and can't use pre-signed URLs.

内容的提问来源于stack exchange,提问作者DiamondJoe12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:22:46