Skip to main content
 首页 » 编程设计

javascript之从本地计算机上的 Ubuntu (AWS EC2) 读取文件

2025年05月04日24jiqing9006

我有一个在 AWS 上运行的 Python 脚本(带有 Ubuntu 的 EC2 实例)。这个 Python 脚本每天输出一个 JSON 文件到 /home/ubuntu 中的目录:

with open("/home/ubuntu/bandsintown/sf_events.json", "w") as writeJSON: 
file_str = json.dumps(allEvents, sort_keys=True) 
file_str = "var sf_events = " + file_str 

这里的一切都按预期工作。我的问题是我不确定如何将此 JSON(存在于 Ubuntu 上)读入我在本地计算机上运行的 JavaScript 文件。

如果我从 Ubuntu 调用文件,JavaScript 找不到文件:

<script src="/home/ubuntu/bandsintown/sf_events.json"></script> 

换句话说,我想将我在云中创建的 JSON 读取到本地计算机上存在的文件中。我应该在 /home/ubuntu 以外的地方输出 JSON 吗?或者,我的本地文件能否以某种方式将 /home/ubuntu 识别为文件位置?

请您参考如下方法:

出现此问题是因为文件不存在 在您的本地计算机上,仅存在于正在运行的 EC2 实例上。 一种可能的解决方案是将 JSON 文件从 EC2 实例上传到 S3,然后将 JSON 文件下载到您的本地计算机 /home/ubuntu/bandsintown/sf_events.json。

首先,在运行的 EC2 实例上安装 AWS CLI 工具包 AWS CLI并在终端中运行以下命令

aws configure 
aws s3 cp /home/ubuntu/bandsintown/sf_events.json s3://mybucket/sf_events.json 

或安装 Python AWS SDK boto3并通过python上传

s3 = boto3.resource('s3') 
 
def upload_file_to_s3(s3_path, local_path): 
    bucket = s3_path.split('/')[2] #bucket is always second as paths are S3://bucket/.././ 
    file_path = '/'.join(s3_path.split('/')[3:]) 
    response = s3.Object(bucket, file_path).upload_file(local_path) 
    return response 
 
s3_path = "s3://mybucket/sf_events.json" 
local_path = "/home/ubuntu/bandsintown/sf_events.json" 
upload_file_to_s3(s3_path, local_path) 

然后在您的本地计算机上通过 AWS CLI 从 s3 下载文件

aws configure 
aws s3 cp s3://mybucket/sf_events.json /home/ubuntu/bandsintown/sf_events.json 

或者如果您更喜欢 python SDK:

s3 = boto3.resource('s3') 
 
def download_file_from_s3(s3_path, local_path): 
    bucket = s3_path.split('/')[2] #bucket is always second as paths are S3://bucket/.././ 
    file_path = '/'.join(s3_path.split('/')[3:]) 
    filename = os.path.basename(s3_path)  
    s3.Object(bucket, file_path).download_file(local_file_path) 
 
s3_path = "s3://mybucket/sf_events.json" 
local_path = "/home/ubuntu/bandsintown/sf_events.json" 
download_file_from_s3(s3_path, local_path) 
 

或者使用在浏览器中运行的 Javascript SDK,但我不推荐这样做,因为您必须公开您的存储桶并注意浏览器兼容性 issue