开发者社区 > 云存储 > 对象存储OSS > 正文

oos文件上传在暂停时报错ResponseError: socket hang up

对象存储OSS中使用node.js SDK调用断点续传时

const OSS = require('ali-oss');

const client = new OSS({})

client.cancel()

nodejs会报错ResponseError: socket hang up

image.png

求大神告知一下原因和解决办法!!!!!!!!!!!!!!!!!!!!!!!!

展开
收起
游客23avyq6nabbbg 2023-06-06 15:06:24 476 0
5 条回答
写回答
取消 提交回答
  • 随心分享,欢迎友善交流讨论:)

    socket hang up 错误通常是由于请求连接被意外关闭或连接超时导致的。在使用阿里云 OSS Node.js SDK 进行断点续传时,可能会出现这种错误,主要是由于连接请求被中断或超时导致的。

    建议您可以检查以下几点:

    确认您已正确配置了 OSS 的 AccessKeyId、AccessKeySecret、Endpoint 等参数。

    检查网络连接是否正常,尝试重新执行代码或更换网络环境,以便确定是否是网络问题导致的。

    检查网络连接超时设置是否合理,您可以尝试增加连接超时时间,例如:

    const client = new OSS({ timeout: 120000, // 设置超时时间为 120 秒 // 其他参数 }); 检查断点续传的设置是否正确,例如是否使用了正确的 UploadId、PartNumber、ETag 等参数。 另外,如果您执行了 client.cancel() 方法,那么当前上传任务将被取消,并且当前的请求连接会被关闭。因此,在执行 client.cancel() 方法之后,如果继续使用当前的连接,可能会导致 socket hang up 错误。建议您可以在取消上传任务后重新创建一个新的连接,以便继续执行其他上传操作。

    如果您仍然无法解决问题,建议您可以在阿里云控制台上查看相关服务的错误日志和监控信息,以便更好地了解问题的原因和解决方案。

    2023-06-30 17:08:35
    赞同 展开评论 打赏
  • 出现 "ResponseError: socket hang up" 错误通常是由于连接到OSS服务时网络出现问题导致了连接中断。

    这个错误可能有多种原因,例如:网络延迟,本地计算机防火墙或代理过滤等。

    对于您的情况,如果在调用 client.cancel() 方法时出现了错误,可能是由于操作请求已经发出但是因为某种原因没有从OSS服务器收到响应,这时因为连接已经断开所以会报 "socket hang up" 错误。

    为了解决这个问题,有一些操作建议:

    1. 确认您的网络连接稳定,并检查是否存在路由器和防火墙等网络隔离设备限制了对OSS的访问。

    2. 检查Node.js SDK的版本是否较旧,升级到最新的稳定版可能有助于修复一些已知的问题。

    3. 针对您的场景,可以尝试添加重试逻辑,以便出现异常时能够重试。

    4. 建议在请求取消之前添加超时选项,如果请求处理超时,将请求标记为取消。

    2023-06-06 17:17:53
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    当您在使用阿里云 OSS SDK 进行文件上传操作时,如果在上传过程中出现异常或意外情况(例如网络中断、连接超时等),可能会导致上传进程中断,从而引发 socket hang up 错误。

    为了解决这个问题,您可以尝试以下几种方法:

    1. 重试上传操作:在上传过程中出现错误时,您可以尝试捕获异常并重新发送上传请求。您可以使用 try/except 语句捕获 ResponseError 异常,并在异常处理程序中重新发送请求。例如:
    import oss2
    
    bucket = oss2.Bucket(oss2.Auth('<your-access-key-id>', '<your-access-key-secret>'), '<your-bucket-name>', '<your-endpoint>')
    
    # 待上传的文件路径
    local_file_path = '<local-file-path>'
    # 在 OSS 中保存的文件名
    oss_file_key = '<oss-file-key>'
    
    # 上传文件
    while True:
        try:
            bucket.put_object_from_file(oss_file_key, local_file_path)
            break
        except oss2.exceptions.ResponseError as e:
            print(f"Upload failed: {e}")
            print("Retrying...")
    

    在上述代码中,我们在上传文件时使用了一个 while True 循环,如果上传发生异常,就会输出异常信息并进行重试。

    1. 调整超时时间:您还可以尝试调整 OSS SDK 中的超时时间以避免连接中断。可以使用如下方法进行设置:
    import oss2
    
    auth = oss2.Auth('<your-access-key-id>', '<your-access-key-secret>')
    bucket = oss2.Bucket(auth, '<your-bucket-name>', '<your-endpoint>')
    
    # 调整超时时间(单位:秒)
    oss2.defaults.connection_pool_idle_timeout = 30
    
    # 待上传的文件路径
    local_file_path = '<local-file-path>'
    # 在 OSS 中保存的文件名
    oss_file_key = '<oss-file-key>'
    
    # 上传文件
    bucket.put_object_from_file(oss_file_key, local_file_path)
    

    在上述代码中,我们使用 oss2.defaults.connection_pool_idle_timeout 属性调整了连接池中的空闲连接超时时间。如果您发现长时间的暂停正在导致连接中断,可以适当增加这个值。

    1. 检查网络设置和防火墙:最后,您还可以检查本地计算机的网络设置和防火墙设置是否正确。如果您的计算机没有正确配置网络或者防火墙异常,则可能会导致上传过程中出现 socket hang up 错误。
    2023-06-06 16:18:31
    赞同 2 展开评论 打赏
  • 在使用 node.js SDK 调用 OSS 断点续传时,如果调用 client.cancel() 函数时报错 ResponseError: socket hang up,这通常是因为客户端取消上传请求失败,导致连接被迫关闭。出现此类问题的常见原因是上传操作过程中发生异常,或者底层网络或服务器出现了问题,导致上传操作被迫终止。以下是一些可能的解决方法:

    1. 检查错误日志:确认报错信息的具体原因。您可以检查对应 bucket 的服务端错误日志,调查异常的具体原因。

    2. 检查服务端设置:确认服务端是否有相关的限制。例如限制上传文件大小或者上传文件数量等。您可以根据阿里云 OSS 的文档来检查服务端的配置和限制。

    3. 重试操作:由于上传操作可能出现异常,您可以考虑使用重试机制进行处理。可以使用 SDK 中提供的 retry 模块,设置超时时间后自动重试操作,避免一次上传失败导致整个上传流程失败。

    另外如果需要在上传过程中取消上传操作,可以使用以下代码片段:

    client.multipartUpload(key, file, {
      progress: function* (p) {
        // 设置上传进度回调函数
        // ...
        if (p.cancel) {
          // 如果需要取消上传
          throw new Error('cancel')
        }
      }
    })
    .catch(function (err) {
      if (err.message == 'cancel') {
        // 上传被取消
        // ...
      } else {
        // 其他错误
        // ...
      }
    })
    

    在上述代码中,可以通过设置 progress 回调函数来获取上传进度。当需要取消上传时,可以抛出一个自定义的 cancel异常,确保上传可以正确取消。

    2023-06-06 15:46:42
    赞同 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    您好,OSS断点续传目前还没有提供主动中断的接口,强行中断会导致异常,建议您部署tcpdump或者wireshark抓包,问题复现后再分析数据包。

    2023-06-06 15:11:09
    赞同 展开评论 打赏

对象存储 OSS 是一款安全、稳定、高性价比、高性能的云存储服务,可以帮助各行业的客户在互联网应用、大数据分析、机器学习、数据归档等各种使用场景存储任意数量的数据,以及进行任意位置的访问,同时通过丰富的数据处理能力更便捷地使用数据。

热门讨论

热门文章

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载