谷歌云函数抛出 404 错误
Posted
技术标签:
【中文标题】谷歌云函数抛出 404 错误【英文标题】:Google Cloud Function throwing a 404 error 【发布时间】:2020-05-01 08:00:12 【问题描述】:我创建了一个云函数,该函数设置为由 Google Cloud Storage 存储桶上的 Finalize/Create 事件触发。
我将 10k 图像转储到存储桶中,并且大多数图像成功运行了 Cloud Function,而有些图像引发了以下异常,我只是对导致此错误的原因感到困惑。
错误返回 404,但是当我检查存储桶时,图像在那里。有没有人有修复以下异常的经验?
由于某种原因,Cloud Function 正在检查一个不存在的目录。
它应该检查以下目录:
https://storage.googleapis.com/download/storage/v1/b/hidden-name/images%2F3683740a95fa3600d4d9a220c9e0b472.jpg
但是,它正在检查以下不存在的目录(/o
文件夹不存在):
https://storage.googleapis.com/download/storage/v1/b/hidden-name/o/images%2F3683740a95fa3600d4d9a220c9e0b472.jpg
这是我得到的例外:
Traceback(最近一次调用最后一次):文件 "/env/local/lib/python3.7/site-packages/google/cloud/storage/blob.py", 第 721 行,在 download_to_file 传输、file_obj、download_url 中, 标头、开始、结束、raw_download 文件 "/env/local/lib/python3.7/site-packages/google/cloud/storage/blob.py", 第 645 行,在 _do_download download.consume(transport) 文件中 "/env/local/lib/python3.7/site-packages/google/resumable_media/requests/download.py", 第 153 行,在使用 self._process_response(result) 文件 "/env/local/lib/python3.7/site-packages/google/resumable_media/_download.py", 第 171 行,在 _process_response 响应中,_ACCEPTABLE_STATUS_CODES, self._get_status_code 文件 "/env/local/lib/python3.7/site-packages/google/resumable_media/_helpers.py", 第 96 行,在 require_status_code *status_codes google.resumable_media.common.InvalidResponse: ('请求失败 状态码', 404, '预期之一', , ) 在处理上述 异常,发生了另一个异常:Traceback(最近一次调用 最后):文件 "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", 第 383 行,在 run_background_function _function_handler.invoke_user_function(event_object) 文件“/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py”, 第 217 行,invoke_user_function 返回 call_user_function(request_or_event) 文件 "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", 第 214 行,在 call_user_function event_context.Context(**request_or_event.context)) 文件 “/user_code/main.py”,第 44 行,在 for_each_new_image 中 create_thumb_move_to_thumbs_bucket(bucket_name,blob_name) 文件 “/user_code/main.py”,第 56 行,在 create_thumb_move_to_thumbs_bucket blob_in_bucket.download_to_filename(download_tmp_filepath) 文件 "/env/local/lib/python3.7/site-packages/google/cloud/storage/blob.py", 第 761 行,在 download_to_filename raw_download=raw_download,文件 "/env/local/lib/python3.7/site-packages/google/cloud/storage/blob.py", 第 724 行,在 download_to_file _raise_from_invalid_response(exc) 文件中 "/env/local/lib/python3.7/site-packages/google/cloud/storage/blob.py", 第 2161 行,在 _raise_from_invalid_response raise exceptions.from_http_status(response.status_code,消息, 响应=响应)google.api_core.exceptions.NotFound:404 GET https://storage.googleapis.com/download/storage/v1/b/hidden-name/o/images%2F3683740a95fa3600d4d9a220c9e0b472.jpg?alt=media: ('请求失败,状态码',404,'预期之一', , )
云函数入口方法:
def for_each_new_image(event, context):
blob_name = event['name'].lower()
bucket_name = event['bucket']
create_thumb_move_to_thumbs_bucket(bucket_name,blob_name)
引发错误的方法:
def create_thumb_move_to_thumbs_bucket(bucket_name,blob_name):
bucket = _storage_client.get_bucket(bucket_name)
blob_in_bucket = bucket.blob(blob_name)
blob_name = blob_name.replace("ugc_images/","")
thumbnail_filename = blob_name.replace(".","-sm.")
thumbnail_tmp_filepath = '/tmp/'.format(thumbnail_filename)
download_tmp_filepath = '/tmp/'.format(blob_name)
blob_in_bucket.download_to_filename(download_tmp_filepath)
引发错误的行:
blob_in_bucket.download_to_filename(download_tmp_filepath)
【问题讨论】:
您是否曾两次上传同一个文件?即使它被覆盖,Object Finalize 也会触发。如果我点击第二个 URL,它会显示 "error": "code": 400, "message": "Only media downloads requests can be sent to /download/*. Re-send request to the same path, but without /download 前缀。", "errors": [ "message": "只有媒体下载请求可以发送到 /download/*。重新发送请求到相同的路径,但没有 /download 前缀。", "域”:“全局”,“原因”:“notDownload” ] @VikramShinde 不,所有独特的图像。我也将 URL 设为虚拟,这意味着它们不是实时的 您能与我们分享您的代码吗? @Chris32 我没有添加所有代码行,而是添加了引发异常的方法/行:“blob_in_bucket.download_to_filename(download_tmp_filepath)” 您能否添加足够的代码以使其可重现。这也将为我们提供更多背景信息以提供帮助 【参考方案1】:我遇到了同样的错误。 我试图访问存储桶中不存在的文件。
【讨论】:
以上是关于谷歌云函数抛出 404 错误的主要内容,如果未能解决你的问题,请参考以下文章