开发者社区 问答 正文

上传地址和凭证方式,当取消上传后,再次上传相同视屏会报错, NoSuchUpload

1. 上传地址和凭证方式,当取消上传后,再次上传相同视屏会报错, NoSuchUpload
2. Failed to upload some parts with error: NoSuchUploadError: The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed
3. 

展开
收起
lcl101-35079 2019-05-22 10:58:30 1355 分享
分享
版权
举报
阿里云 AI 助理回答

问题1:上传地址和凭证方式,当取消上传后,再次上传相同视频会报错,NoSuchUpload

问题原因
在使用上传地址和凭证的方式上传文件时,如果上传被取消(例如手动中断或因网络问题导致失败),OSS服务端会认为该上传任务已被终止。此时,上传任务的UploadId将失效,无法继续使用该UploadId进行分片上传或断点续传。

解决方案
1. 重新初始化上传任务
如果需要重新上传相同的文件,请重新调用初始化接口(如InitiateMultipartUpload)以获取新的UploadId。确保在后续的分片上传操作中使用新生成的UploadId

  1. 检查上传状态
    在重新上传之前,可以通过查询上传任务的状态确认是否已完成或已取消。如果任务已被取消或完成,则必须重新初始化上传任务。

  2. 避免重复上传
    如果上传任务未完成但需要重新开始,请确保清理之前的上传记录,避免因残留的UploadId导致冲突。


问题2:Failed to upload some parts with error: NoSuchUploadError: The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed

问题原因
此错误通常发生在以下场景中: - 无效的UploadId:使用的UploadId可能已被取消、完成或从未正确初始化。 - 并发操作冲突:多个作业或线程同时操作同一目录,可能导致某些分片上传任务被覆盖或中断。 - 临时目录不可访问:在EMR集群中,某些Executor可能无法访问JindoSDK使用的临时目录,导致上传任务失败。

解决方案
1. 验证UploadId的有效性
确保在分片上传前正确调用了InitiateMultipartUpload接口,并保存返回的UploadId。如果UploadId无效或丢失,请重新初始化上传任务。

  1. 关闭JobCommitter(适用于EMR集群)
    如果您使用的是EMR集群,并且遇到此问题,建议关闭JobCommitter功能。此功能可能会导致多个并发作业之间的冲突,尤其是在低版本的SmartData(2.5.x以下或3.6.x以下)中。

  2. 检查临时目录权限
    确保所有Executor能够正常访问JindoSDK使用的临时目录。如果存在权限问题,请调整目录权限或重新配置临时目录路径。

  3. 重试机制
    在分片上传过程中,建议实现重试机制。如果某个分片上传失败,可以捕获异常并重新尝试上传该分片,而不是直接中断整个任务。


问题3:补充说明与注意事项

重要提醒
- Base64解码:无论是通过CreateUploadVideo还是其他接口获取的上传地址(UploadAddress)和上传凭证(UploadAuth),都需要先进行Base64解码后再使用。这是常见的错误来源之一,请务必注意。

  • 多应用支持:如果您启用了多应用体系,请确保在请求上传地址和凭证时正确传递AppId参数,以将文件上传到指定的应用下。

  • 并发控制:在高并发场景下,建议对上传任务进行合理的分片管理和任务调度,避免因资源竞争导致的上传失败。

示例代码
以下是一个获取上传地址和凭证的Python示例代码,供参考:

from aliyunsdkcore.client import AcsClient
from aliyunsdkvod.request.v20170321 import CreateUploadVideoRequest
import json

def get_upload_credentials():
    client = AcsClient('<AccessKeyId>', '<AccessKeySecret>', 'cn-shanghai')
    request = CreateUploadVideoRequest.CreateUploadVideoRequest()
    request.set_Title("TestVideo")
    request.set_FileName("test.mp4")
    response = client.do_action_with_exception(request)
    result = json.loads(response)
    print("UploadAddress:", result['UploadAddress'])
    print("UploadAuth:", result['UploadAuth'])

if __name__ == '__main__':
    get_upload_credentials()

通过上述方法,您可以有效解决NoSuchUpload相关问题,并确保上传任务顺利完成。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等