【问题标题】:Google Cloud Function throwing a 404 error谷歌云函数抛出 404 错误
【发布时间】: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)”
  • 您能否添加足够的代码以使其可重现。这也将为我们提供更多背景信息以提供帮助

标签: google-cloud-platform google-cloud-functions google-cloud-storage


【解决方案1】:

我遇到了同样的错误。 我试图访问存储桶中不存在的文件。

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2017-12-23
    • 2023-03-22
    • 2016-10-09
    • 2019-06-28
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多