我们计划在谷歌云存储上托管我们的应用程序,我只是想确认我可以在谷歌的基础设施上托管什么样的应用程序。我们有大约40-45个应用程序,包括.net、SAP、filenet系统等。我将能够在谷歌云存储上托管它们
我已经研究过如何使用RESTfulAPI部署应用程序,但其他平台应用程序如何
谢谢,
Vinit你意识到云存储就是存储数据吗?您无法在云存储上部署和运行应用程序。运行应用程序是应用程序引擎(Python或Java web应用程序)或计算引擎(Linux虚拟服务器)的核心内容。感谢Philip
是否有任何特定规则可用于为授权标头选择身份验证标识符?
我不知道是使用GOOG1还是OAuth或AWS等
我们可以直接在授权头中使用身份验证标识符和访问密钥来进行调用吗
此链接表示,我们可以使用身份验证标识符(OAuth | GOOG1 | AWS),后跟以下之一:
有效的OAuth 2.0令牌
访问密钥
签名
我尝试使用“GOOG1 AccessKey”,但出现以下错误
<Error>
<Code>InvalidSecurity</Code>
项目名称为Google存储项目
项目ID是anjanesh
但在控制台中,我再也看不到谷歌云存储了。仅显示AppEngine、数据存储和BigQuery。我的谷歌云存储菜单项去了哪里?我有很多桶在里面。而且,如果我去点击在线浏览器,它会转到“这已经神奇地解决了”。谢谢
我正在谷歌云存储上保存远程音频文件。
我想在freeswitch中播放这些文件
当我使用:
mediaLink = "http://storage.googleapis.com/myBucket/file.wav";
session:streamFile(mediaLink);
它工作得很好
但是当我使用签名URL时
mediaLink = "http://storage.googleapis.com/myBucket/file.wav?GoogleAccessId=xxx-xxx@dev
我们有一个新的第三方文件为基础的整合来为我们的一个项目。这是一家不同的公司,我们需要获取文件并继续处理。我们需要安全地传输此文件。所以第一个选择是SFTP,但是我们正在考虑对SFTP和谷歌云存储进行研究。谷歌云存储能代替SFTP吗?相同的方法有哪些优点和缺点。谢谢 这是两种不同的东西。谷歌云存储是一项存储文件的服务。SFTP是用于在两台计算机之间传输文件的协议
如果您的唯一目标是将文件从计算机a传输到计算机B,并且两者都可以通过SFTP相互通信,那么这是一个非常好的解决方案
也就是说,像GCS这
我正在使用免费层来了解谷歌云计算是否适合我的需要
我不了解无存储层。我在谷歌支持中找不到任何解释
--“5GB月”是免费的。但最小铲斗尺寸为10克。
--所以我不能在空闲层有任何持久性存储,对吗?
--我只能半个月使用它,然后删除?这些都有很好的文档记录。没有提到最低10 GB。这些都有很好的文档记录。没有提到最低10 GB。在哪里可以看到最低10G的存储桶大小?在哪里可以看到最低10G的存储桶大小?感谢您的链接。我记得在我创建第一个存储桶时看到了10GB分钟,但现在我在任何地方都看不到。空的存
我正在使用Google Compute engine上运行的node.js应用程序为每个用户创建GCS bucket。bucket创建是每个用户的一次性活动。但是,当我试图运行程序为20个用户并行创建唯一的存储桶时,我得到了以下错误。
“错误代码”:429和“错误消息”:“项目超出了创建和删除存储桶的速率限制。”
有没有办法提高这个限额?没有
对于大约每2秒创建和删除一个bucket和删除一个操作,每个项目有一个速率限制,因此在大多数情况下,计划使用更少的bucket和更多的对象。如果您正在设计
使用c+访问谷歌云存储+;
有没有办法从C++应用程序(托管在容器引擎上)获得“谷歌”云桶的“和”数据?没有C++的客户库在官方文档中列出了是的,很可能有一种方法可以做到这一点。你的实际问题是什么?@ NRRD我想通过C++获得名字和帖子数据到谷歌桶中的文件。
如何在每次收到来自Pubsub的消息时向GCS写入,它会进行窗口写入,但不会按元素写入。关于这件事的任何提示都非常感谢
示例链接()
运行此示例代码后,它将写入发送到GCS的发布子消息。但当持续时间设置为1分钟时,它会保存所有消息,然后在一分钟后写入一个文件,但我希望它将每个消息写入不同的文件 如果每条消息需要一个文件,一个选项是创建如下简单转换:
package com.myapp.dataflow.transform;
import org.apache.beam.sdk.transfor
我需要使用gsutil下载多个文件,我注意到gsutil在下载多个文件时使用了大量内存。(下载三个2G文件(每个文件有9个进程)时,内存约为1-2GB)。有没有办法调整gsutil的内存使用率?这对我来说很重要,因为我在GKE中运行gsutil,如果使用太多内存(超过限制),容器将被杀死
另一个问题:gsutil似乎无法在一个命令中下载同名文件(一个命令将覆盖另一个?)。所以我没有使用-m选项。相反,我使用单个gsutil命令下载每个文件:
gsutil-o“gsutil:parallel_-t
我在google compute engine上运行一些应用程序,它从google云存储读取数据,并将数据写入永久磁盘。使用gcsfuse安装铲斗
P>但在中间,桶已被卸载,我的应用程序将进入休眠模式并陷入停滞。
当我试图查看挂载目录中的内容时,我遇到以下错误
无法访问/home/santhosh/MountPoint/未连接传输终结点
水桶带电有时间限制吗?我们怎么能看到铲斗一直被安装着
有人能帮我解决这个问题吗?我希望程序在中间没有任何中断。 < P>我经历相同的问题,随机输入输出错误,卸载
我们有一个每秒数千个事件的单一流媒体事件源,这些事件都用一个id标记,标识该事件属于我们数万个客户中的哪一个。我们希望使用此事件源来填充数据仓库(在流模式下),但是,我们的事件源不是持久性的,因此我们还希望将原始数据归档到GCS中,以便在进行需要的更改时,可以通过数据仓库管道重播它。由于数据保留要求,我们保存的任何原始数据都需要按客户进行分区,以便我们可以轻松地删除它
在数据流中解决这个问题最简单的方法是什么?目前,我们正在创建一个带有自定义接收器的数据流作业,该接收器将数据写入GCS/BigQ
有没有可能在不公开的情况下从Google云存储中删除受保护的文件?我不介意固定的预定义令牌。我只是想避免我的公共文件被掏空,花了很多钱。你可以使用。这允许您创建一个签名URL,该URL可用于下载对象而无需额外身份验证。另一种方法,如果您不介意从外部获取令牌,则使用curl在您对GCS的调用中设置“授权”头,如下所示:
curl -H "Authorization: Bearer 1/fFBGRNJru1FQd44AzqT3Zg" https://www.googleapis.
我在谷歌云存储上有几个存储桶,我猜我的生命周期文件没有正确设置,因为我所有的存储桶现在都是空的
{
"lifecycle": {
"rule": [
{
"action": {"type": "Delete"},
"condition": {
"age": 60,
"isLive": false
}
},
{
"action": {"type":
我使用传输服务将S3存储桶传输到地面军事系统。转会进行得很顺利。从云控制台,我可以看到s3存储桶。但是,在我使用gcsfuse将GCS bucket(其中包含传输的s3 bucket)装载到GCE VM中之后,它在ls命令中没有出现
我能解决这个问题吗
谢谢!请参阅有关隐式目录的文档。您可能有名为foo/bar的对象,但gcsfuse不会显示名为foo的目录,除非您的bucket中有名为foo/的对象
您可以使用--隐式目录解决这个问题,但也有一些缺点。请参阅上面的链接
当对象上传到GCS bucket并公开共享时,bucket的所有者负责用户下载这些对象的所有费用。我如何改变这一点,以使下载者代替我付费?此功能称为“请求者付费”。其文档如下:
其思想是将一个bucket标记为“请求者付费”bucket。完成后,您的项目只负责将对象存储在存储桶中的价格(如果是近线或冷线存储桶,则需要支付任何早期删除费用)。任何想要从这个bucket下载一个对象(或者上传一个新对象、复制一个对象等)的人都必须指定GCS应该为操作付费的项目
这是一种非常有用的配置,适用于您希望公开
我正在创建Dialogflow应用程序,我想在某个流量点发送短信。为此,我考虑将收件人的电话号码存储在excel中,并将此excel存储在google云存储中。如何从excel中获取电话数据?您可以将文件放入您提到的Google云存储(GCS)中,并使用,例如,用于GCS的PHP客户端库[1]和PHPExcel[2]
您会发现使用PHP从Excel文件读取和提取数据非常容易
您还可以使用PHP ExcelReader[3],它也可以读取Excel.xls文件。PHPExcel还可以管理.xlsx
Google云存储的insert bucket API允许设置bucket生命周期。但是,除非执行修补程序调用,否则无法启用bucket生命周期。此外,除非存在bucket,否则无法执行修补程序调用。假设我正在创建一个新的bucket,那么在insert中包含lifecycle字段的目的是什么?我遗漏了什么吗?您可以创建一个新的bucket,并使用相同的调用为该bucket提供生命周期配置。下面是一个例子:
POST https://www.googleapis.com/storage/v1/b
我目前正在使用Google Cloud Shell,我希望访问另一个用户的永久磁盘。(不使用本地shell)
关于查询主题的更多信息:Cloud Shell是一款专门为您提供的微型虚拟机,免费,并带有一个挂载的个人磁盘
已编辑:感谢@Johnhanley comment,您可以使用此文件访问其他人的云shell文件。但是,您需要目标Cloud Shell env的凭据,它不是非常安全,建议使用
但是,您可以安装一个。另一个用户也是。使用fuse,您可以像在目录中一样在bucket中导航。但要小心
希望我问这个问题听起来不会太愚蠢。我妻子和我在家外面经营一家小企业。我们想分享会计数据,但我经常在另一个地方。我们使用具有联网功能的Sage Peachtree Premium Accounting的PC版本,因此数据文件可以存储在公共位置。是否可以使用谷歌云存储之类的工具来共享此文件?谷歌云存储对于您所说的内容来说可能有些过分了。云存储是web开发人员用来向世界各地的大量用户交付图像、视频和文档等资产的工具
然而,像谷歌驱动器或Dropbox这样的东西可能会很好地解决这个问题。如果你们都有Gm
我试图创建一个bucket作为sub.domain.com,但是我得到了一个错误:“您试图创建的bucket是另一个用户拥有的域名。”
我已经验证了站长工具的所有权,甚至未验证和重新验证。我登录了一个既有站长工具又有云存储帐户的帐户
我已经用站长工具验证了其他域的其他bucket具有相同的结构,但这是唯一一个给我这个错误的bucket
关于如何解决这个问题,而不用花150美元在谷歌开一张罚单,你有什么想法吗?如果你告诉我们你试图使用的特定bucket名称/域名,我们可以进行调查。如果您不想在St
目前,我们正在将代码迁移到计算引擎上,并且正在努力理解从php上传的文件。需要专业人士朝正确的方向轻轻推一下
我们正在将服务器转移到计算引擎,并需要客户能够将文件从我们的网站上传到谷歌云存储。我不知道最好的方法是什么,也许是javascript,也许是php?PHP需要对当前代码进行最少的更改
当托管在计算引擎上时,我们如何将文件从PHP应用程序上载到云存储
任何帮助都将不胜感激。我们将得到一个支持包,但目前我们正处于测试阶段 您可以在这里找到通过PHP将文件上传到Google云存储的受支持方法
我有一个在谷歌计算引擎上运行的ApacheSpark脚本,它有一个谷歌云存储的输出。我的云存储文件夹中有300多个part-00XXX文件。我想合并它们
我试过:
poiuytrez@spark-m:~$ gsutil compose gs://mybucket/data/* gs://mybucket/myfile.csv
但我有一个错误:
CommandException: "compose" called with too many component objects. Limit is
我对云存储有点陌生
我们有一个将文件上传到FTP服务器的应用程序
现在,随着我们系统的发展,我们会选择像谷歌云存储这样的云存储服务
主要问题是我们的客户端软件已经分发给成千上万的客户。此客户端软件使用FTP命令上载文件
现在,如果我们计划将存储更改为Google Cloud storage,是否可以使用FTP命令将文件从客户端软件上载到Google Cloud storage。您可以尝试在安装有gcs fuse的目录上运行FTP服务器:
如何在顶部运行FTP服务器?
如何从另一个项目访问Google云存储桶(在项目中)?我有足够的权限管理这两个项目。我正在用Python编程。GCS存储桶名称是全局唯一的。您可以从任何项目中指定任何bucket名称,如果您的帐户有权访问该名称,则调用将正常工作
我正在使用google存储来存储产品图像。我想显示no-product-image.png图像,以防产品存储中没有图像,而不是404错误代码请参阅关于gsutil web命令
我读了很多博客,看了很多教程,但找不到任何帮助我解决问题的方法
我有一个将文件放入谷歌云存储的涉众,我已经编写了一个脚本来执行ETL任务
如果我能创建一个触发器,一旦文件被放到谷歌云存储的某个特定位置,它就会运行我的脚本,这将非常棒。谷歌云存储支持。这允许您在将新对象上载到bucket时以编程方式接收通知。谷歌云存储支持。这允许您在将新对象上载到bucket时以编程方式接收通知
我正在研究tensorflow模型,我想利用最新的ulpoad对象,以便从上传的对象获得输出。是否有方法使用python访问上传到Google云存储桶的最新对象。没有直接方法从Google云存储获取最新上传的对象。但是,使用对象的元数据有一个变通方法
上传到谷歌云存储的每个对象都有不同的元数据。有关更多信息,请访问文档。其中一个元数据是“上次更新的”。此值是上次更新对象的时间戳。这只能在3种情况下发生:
A) 该对象是第一次上载的
B) 该对象已上载并被替换,因为它已存在
C) 对象的元数据已更
我创建了一个bucket,名为test.domain.com,并为domaintest.domain.com
我将web集用作gsutil web集-m index.php-e missing.php gs://test.domain.com
我已经上传了index.php文件,gsutil cp index.php gs://test.domain.com,但我无法正常浏览它,当我尝试浏览时,它正在下载到桌面。谷歌云存储不会在用户请求时执行类似代码的php脚本。相反,它将PHP文件本身提供给用
我不明白为什么我在自定义域下的bucket设置中遇到问题。我有几个工作得很好,有几个以前工作过但现在不工作,还有几个我正努力从头开始安装,无法让它们工作
我是这样做的:
我在谷歌应用程序引擎上安装了一个应用程序。
我设置了一个名为gcs.domain.com的bucket,它会提示我先用谷歌验证域名
网站管理员工具和域TXT记录-之后我可以
创建一个bucket。
我将CNAME设置为能够访问我的
自定义域。
我将服务帐户名添加为bucket的所有者,这样我的应用程序就可以从中进行写入和读取。
我们使用ETL过程从Google云存储中提取数据,但令人烦恼的是,每当Google将udpates发布到GSUtil时,它都会挂起,因为它会出现一个提示,询问您是否要更新库。如果您手动执行此操作,则可以,但在自动SSIS包中运行此操作时就不酷了,因为作业需要几天才能完成,而且您一直在为同样愚蠢的原因浪费时间
我原以为我将成为一名cleaver,并将“python gsutil update-n”添加到bash脚本的顶部,我正在SSIS包中自动生成/执行该脚本,以期抑制此问题,但当我在Window
我的帐户可以访问顶级域的Google Webmaster工具,我也验证了子域和子域,但是当我尝试用我假设验证过的任何域创建一个新的bucket时,我得到“您尝试创建的bucket是另一个用户拥有的域名。”
还有什么我遗漏的吗?听起来创建bucket的帐户与拥有域的帐户不同。你的个人帐户拥有这个域名吗?如果是的话,您如何针对谷歌云存储授权?您是否正在使用服务帐户?您很容易发现自己使用的是服务帐户而不是实际帐户。例如,如果您从GCE实例使用gsutil,并且使用默认凭据,那么这将授权您作为与该项目关
我想让我的一个服务器读/写一个谷歌云存储桶,但不删除
基本上我希望服务器能够上传备份,但如果恶意用户闯入,我不希望他们能够删除备份
Google云存储ACL是否支持此权限模型?bucket的写入权限意味着用户可以修改它,用于创建和删除文件。目前地面军事系统上没有类似于“仅附加模式”的功能。查看有关GCS ACL的详细说明
在过去的几个月里,我一直在使用旧控制台成功地使用谷歌云存储,但现在我被重定向到新的谷歌开发者控制台,上传文件时遇到了麻烦
在新的Google开发者控制台中,如果我点击Storage/Cloud Storage/Storage Browser/MyBucket,我仍然可以像往常一样上传文件。但是如果我点击一个子文件夹,那么在我选择了要上传的文件之后,什么也不会发生。如果我返回到我的bucket的根目录,我仍然无法上载,我需要再次选择Storage Browser,以便能够将文件上载到根目录,并且只
可以访问git Google云源存储库或将其复制(传输)到Google云存储
我们的想法是将git repo用作一个类似的网站。您可以按如下方式执行此操作:
用于将数据内容复制到Google云存储中,可能是在处理之后(例如,如果您想使用或生成您的网站)。请注意,这还将复制您的.git目录,您可能希望将其排除在外
您可以按如下方式执行此操作:
用于将数据内容复制到Google云存储中,可能是在处理之后(例如,如果您想使用或生成您的网站)。请注意,这还将复制您的.git目录,您可能希望将其排除在
我有一个golang程序在本地笔记本电脑上运行。我以前有一个谷歌云帐户,我用它将图像上传到一个bucket(使用gcloud本地上下文)。成功了
我创建了另一个公司品牌的谷歌云账户,并将我们的公司卡与之链接
从那以后,我在标题上就犯了错误
我联系了支持人员,得到了以下信息:
嗨
不幸的是,我们无法确定对您的项目采取的任何与虐待相关的行动。要解决此问题,请联系谷歌云平台社区支持
真诚地,
谷歌云平台/API信任与安全团队
你们有什么想法吗?任何帮助都将不胜感激。问题是,我的项目用于身份验证的J
我正在尝试使用Google云数据流将Google PubSub消息写入Google云存储。我知道TextIO/AvroIO不支持流式管道。然而,我在[1]中读到,在作者的评论中,可以通过流式管道从ParDo/DoFn写入GCS。我尽可能密切地关注他们的文章,构建了一条管道
我的目标是这种行为:
在与消息在dataflow requests/[isodate time]/[paneIndex]中发布的时间相对应的路径下,以多达100个为一批写入GCS中的对象(每个窗格一个)的消息
我得到了不同
我正在使用gsutil,需要将大量文件/子目录从windows服务器上的目录复制到Google云存储桶
我已经查看了文档,但不知何故,我似乎无法正确理解语法-我正在尝试以下内容:
c:\test>gsutil-mcp-r。gs://mytestbucket
但我一直得到这样的信息:
CommandException:没有匹配的URL:
我做错了什么
问候
莫滕·霍思·尼尔森试试gsutil-mcp-r*gs://mytestbucket
或者gsutil-mcp-r**gs://mytestbu
我创建了一个VM实例并部署了我的应用程序。我可以通过给定的外部IP地址访问应用程序,但我希望通过某个域访问它,就像openshift提供了一个域AAA.rhcloud.com,我们可以使用它从VM访问项目
如果没有正常的DNS和CNAME路由,是否可以轻松完成
谢谢,
Manish大多数IP地址的DNS地址都比反向DNS地址高:
$ dig +short -x 104.197.1.2
2.1.197.104.bc.googleusercontent.com.
正如您在GCE上看到的,您可以反转
我已经上传了一个图像文件到我的谷歌存储桶
#Block 1
#Storing the local file inside the bucket
blob_response = bucket.blob(cloud_path)
blob_response.upload_from_filename(local_path, content_type='image/png')
文件上传得很好。我验证bucket中的文件。
上传文件后,我将尝试使用相同的方法更新文件的acl,以便公开
在提交表单时,我尝试使用post方法将对象发布到google云存储
我收到“SignatureDesNotMatch”错误
我使用以下方法生成策略和签名:
$secret_key = 'xxxxxxxxxxxxxxxxxxxx';
$policy_sting = '{"expiration": "2014-06-16T11:11:11Z" , "conditions": [ ["starts-with", "$key", ""],
{"acl": "public-read" },
我需要创建一个“服务帐户”,以便允许我的应用程序访问谷歌云存储
我试图通过Google Cloud前端“创建一个新的客户端ID”-->服务帐户,但出现以下错误:
服务器错误哎呀!我们的坏习惯
请再试一次。如果问题仍然存在,请使用通知我们
下面的“发送反馈”链接。复制下面的跟踪号码,然后
将其纳入您的反馈中。谢谢
追踪号码:XYZ
我已经“发送了反馈”,但是这个错误使测试很难进行,而且我没有每月150美元的谷歌支持计划。。。因此,我现在只能听命于谷歌的支持系统,而不知道解决问题需要多长时间
有没有
我想我只是用gsutil创建了一个签名url,但它从未向我询问私钥的密码,而是在我发出命令后,在没有任何输出的情况下下降到命令提示符
我尝试使用commondatastorage.googleapis.com作为url访问bucket,并将秘密字符串作为用户名/密码,但我得到了403个禁止的错误
如何通过S3浏览器应用程序访问存储桶
谢谢。我不知道你在问什么。运行signurl时,gsutil的输出是什么?gsutil signurl命令与S3浏览器应用程序有什么关系?昨天我觉得我的应用程序不会
我试图对一个bucket和资源进行操作,但我不断地得到拒绝访问的错误
e、 g
```
$gsutil ls-L gs://images/large
gs://images/large/aa.png:
Creation time: Tue, 25 Nov 2014 20:03:19 GMT
Cache-Control: public, max-age=2592000
Content-Length: 343034
Content-Type:
我正在使用以下RESTAPI从托管在google云存储的bucket中获取对象列表
GET/storage/v1/b//o
响应对象按时间升序排列。因为我桶里的东西太多了,所以我不想把它们都拿来。相反,我希望以降序获取对象,并限制项目数量。这在API中目前是不可能的。您必须列出所有对象
可选地,可以考虑使用它来获得新创建的对象的提要,如果符合您的用例。 < P>这是API目前不可能的。您必须列出所有对象
可选地,您可以考虑使用它,如果您适合使用用例,则可以使用新创建的对象的提要。
我想使用Google Coldline来存储客户文件的备份。要仅上载新文件,我必须枚举我的Google存储桶中的所有现有文件,然后将列表与本地文件夹的内容进行比较
在谷歌的文档中,我发现定制元数据会产生额外的成本,计算方法与存储对象本身的数据访问相同
但是对象名呢?如果我经常读取一个bucket中所有对象的名称列表,此操作是否会增加数据访问成本?列出bucket和对象的名称是和是。频繁的get请求将增加您的数据成本
如果我将一些文件上传到谷歌云存储桶中并公开,谷歌会在搜索结果中为其编制索引吗?谷歌的搜索索引独立于谷歌云存储(GCS)。在GCS中公开文件不会自动在谷歌的搜索结果中为其编制索引
因此,GCS中的公共文件不会被谷歌自动编入索引。Hi-我知道它不会被自动编入索引。但一段时间后,它最终会被编入索引吗?或者我需要提交链接进行索引吗?或者甚至可以索引该链接?在完成回答之前,我按了回车键。现在已编辑。您必须提交它才能对其进行索引。它永远不会自动为其编制索引。如果您自己提交或通过正常爬网发现,它仍然有资格编制
我想将Google bucket装载到本地服务器。但是,当我运行该行时,我指向它的目录是空的。有什么想法吗
gcsfuse mssng_vcf_files ./mountbucket/
报告说:
文件系统已成功装入
但是目录mountbucket/是空的。gcsfuse将不显示由名称中带有斜杠的文件定义的任何目录。因此,如果您的bucket包含/files/index.txt,则在创建名为files的对象之前,它不会显示。我假设您的bucket包含目录,然后是文件,如果是这种情况,这可能是您的
关于地面军事系统,我有以下问题:
一个bucket可以包含的blob数量有限制吗
我正在使用java客户端在多线程应用程序中大量创建blob。每个时间单位创建的blob数量是否有限制?
当达到特定阈值时,Google云存储API是否将请求标记为潜在DDoS攻击
该页面有一些关于这方面的文档。具体而言:
不,桶中的对象数量没有限制
从文档页面:
跨多个对象写入没有限制。最初是桶
支持大约每秒1000次写入,然后根据需要进行扩展
我用谷歌存储上传文件。但是,似乎无论我做什么,content-dispositionHTTP响应头都被设置为attachment,这将强制浏览器下载文件,而不是将其显示在浏览器选项卡中
以下是我的用法:
{:ok, object} =
GoogleApi.Storage.V1.Api.Objects.storage_objects_insert_simple(
gconn,
"my-uploads-bucket",
"multipart&
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 28 页