You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#代码上传至Azure Blob的MP4无法在浏览器播放求助

问题

我用以下C#代码把MP4视频上传到Azure Blob存储,文件能成功上传,但浏览器访问文件URL时无法播放。不过通过Azure门户上传同一个文件却能正常播放,不知道代码哪里出问题了。

public async Task<string> UploadVideoFileAsync(IFormFile file, string fileName, string containerName, IDictionary<string, string>? metadata = null)
{
    var containerClient = _blobServiceClient.GetBlobContainerClient(containerName);
    try
    {
        await containerClient.CreateIfNotExistsAsync();
        var blobClient = containerClient.GetBlobClient(fileName);
        using (Stream stream = file.OpenReadStream())
        {
            stream.Seek(0, SeekOrigin.Begin);                
            await blobClient.UploadAsync(stream, new BlobUploadOptions
            {
                HttpHeaders = new BlobHttpHeaders { ContentType = "video/mp4" }
            });
        }

        if (metadata != null)
        {
            await blobClient.SetMetadataAsync(metadata);
        }

        return blobClient.Uri.ToString();
    }
    catch (RequestFailedException ex)
    {
        // Handle the exception here, e.g., log or return an error message.
        return $"Error uploading the file: {ex.Message}";
    }
}  

通过上述代码上传的文件无法在浏览器播放:
无法播放截图

解决方法

出现这个问题通常是以下几个原因,对应调整代码即可:

  • 缺失视频流式传输所需的HTTP头
    浏览器播放视频需要支持范围请求(Range Requests),补充设置关键HTTP头能帮助浏览器正确识别和流式播放。修改BlobHttpHeaders部分:

    HttpHeaders = new BlobHttpHeaders 
    { 
        ContentType = "video/mp4",
        ContentLength = file.Length, // 显式指定文件长度
        CacheControl = "public, max-age=31536000",
        ContentDisposition = "inline; filename=\"" + fileName + "\"" // 告知浏览器以内联方式打开
    }
    
  • 流读取完整性问题
    虽然调用了stream.Seek(0, SeekOrigin.Begin),但IFormFile.OpenReadStream()默认已从起始位置开始,额外Seek可能引发潜在问题。可以直接使用简化的上传重载,确保流完整读取:

    await blobClient.UploadAsync(file.OpenReadStream(), file.Length);
    
  • Blob容器访问权限不足
    确保Blob容器的访问级别是Blob或Container(而非Private),否则浏览器无法直接访问。可以在代码中添加权限设置:

    await containerClient.SetAccessPolicyAsync(PublicAccessType.Blob);
    

内容的提问来源于stack exchange,提问作者Reza Shirazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 01:28:30