从 xamarin 将文件上传到 Web api 服务器 - 请求处理时间太长

2024-01-10

我正在使用 HttpClient 将二进制文件发布到 Azure 托管的服务器。对于大小不太大的文件,该请求需要很长时间才能传递。有时,当客户端因超时而取消任务时,服务器会收到请求。我使用以下代码异步上传数据:

public async Task<HttpResponseMessage> UploadFile(byte[] file)
{
    videoThumbName = Guid.NewGuid().ToString();
    var progress = new System.Net.Http.Handlers.ProgressMessageHandler();

    progress.HttpSendProgress += progress_HttpSendProgress;

    using (var client = HttpClientFactory.Create(progress))
    {
        client.BaseAddress = new Uri(GlobalVariables.host);

        // Set the Accept header for BSON.
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/bson"));

        var request = new uploadFileModel { data = file, dateCreated = DateTime.Now, fileName = fileName, username = loggedUser, VideoThumbName = videoThumbName};

        // POST using the BSON formatter.
        MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
        var m = client.MaxResponseContentBufferSize;
        var result = await client.PostAsync("api/media/upload", request, bsonFormatter);

        return result.EnsureSuccessStatusCode();
    }
}

服务器端代码如下所示(为了简洁起见,我留下了一些代码):

[HttpPost]
[Route("upload")]
public async Task<HttpResponseMessage> Upload(uploadFileModel model)
{
    var result = new HttpResponseMessage(HttpStatusCode.OK);

    if (ModelState.IsValid)
    {
        string thumbname = model.VideoThumbName;
        string tempPath = HttpContext.Current.Server.MapPath("~/video");
        string sourceFilePath = Path.Combine(HttpContext.Current.Server.MapPath("~/video"), model.fileName);
        string pathToThumbs = Path.Combine(HttpContext.Current.Server.MapPath("~/contents/member/" + model.username + "/thumbs"), thumbname + ".jpg");
        string finalPath = Path.Combine(HttpContext.Current.Server.MapPath("~/contents/member/" + model.username + "/flv"), model.fileName);
        string thumbPath = HttpContext.Current.Server.MapPath("~/contents/member/" + model.username + "/thumbs");
        string vidDuration = "";
        string videoDurationSec = "";

        int maxWidth = 380;
        int maxHeight = 360;

        try
        {
            File.WriteAllBytes(sourceFilePath, model.data);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        var ffMpegThumb = new NReco.VideoConverter.FFMpegConverter();

        ffMpegThumb.GetVideoThumbnail(sourceFilePath, pathToThumbs);

        var ffmpegVid = new NReco.VideoConverter.FFMpegConverter();

        ffmpegVid.ConvertMedia(sourceFilePath, Format.mp4, finalPath, Format.mp4, new ConvertSettings() { VideoCodec = "h264" });

        return result;
    }
    else
    {
        throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
    }

}

是否有可能是因为我的互联网连接请求延迟了?我发送的文件大小甚至没有那么大,它们的大小约为 1-2 mbs。我想知道更大的文件需要多长时间。 我可以改进这个过程吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 xamarin 将文件上传到 Web api 服务器 - 请求处理时间太长 的相关文章

随机推荐

  • 当多个文件作为参数传递给 perl cli 时,Perl 中文件的行号

    In awk如果我给出多个文件作为参数awk 有两个特殊变量 NR 对应于所有文件中所有行的行号 FNR 当前文件的行号 我知道在 Perl 中 对应于NR 所有文件中的行中的当前行 有什么可以媲美的FNRPerl 中的 AWK 也有吗 假
  • PBSPro qsub 输出错误文件定向到名称中包含 jobid 的路径

    我正在使用 PBSPro 并尝试使用 qsub 命令行提交作业 但似乎无法按照我想要的方式命名输出和错误文件 目前使用 qsub N subjobname short o path o PBS JOBID e path e PBS JOBI
  • VSTS 持续集成触发器不起作用

    我很确定这个设置在某一时刻对我们来说是有效的 我对我们的构建进行了一些更改以反映一些操作更改 但现在 CI git 分支触发器不起作用 我正在尝试获取它 以便当 PR 合并到 master 时它会触发发布构建 我可以手动触发此构建 但在从
  • 从 csproj 引用 ASP.NET xproj

    我正在使用 Visual Studio 中的新 类库 NuGet 包 模板之一 并且我想为其创建一个 xUnit 测试库 问题是 当我创建新的 csproj 库并尝试引用 xproj 包时 Visual Studio 说 The refer
  • 使用 c++ 中的 boost 进程库输出

    我使用升压过程并使用默认代码主要教程页面 http www highscore de boost process process tutorials html 我已经运行了这段代码 但它没有打印任何输出 include
  • BlackBerry - 在位图字段上调用单击事件

    谁能帮我解决以下问题 我正在为黑莓制作一个应用程序 从一个位图字段我必须通过单击该位图字段来调用一个新屏幕 我想要相同的代码 如何通过单击位图字段来调用新屏幕 我正在使用黑莓 JDE 4 7 尝试使 BitmapField 可聚焦 Bitm
  • Excel 中具有多个条件的 CUBESET() 函数

    我正在尝试在 Excel 中创建 CUBESET 函数 但我不知道如何使用多个条件过滤它同一维度内 这就是我迄今为止所遵循的一个标准 示例1 CUBESET ThisWorkbookDataModel Facebook Bucket C A
  • 有效地找到大型数组中的最低有效设置位?

    我有一个巨大的内存块 位向量 其大小N一个内存页内的位 考虑N平均为 5000 即 5k 位来存储一些标志信息 在某个时间点 超频繁 关键 我需要找到整个大位向量中的第一个位集 现在我对每个 64 个单词执行此操作 即在 builtin c
  • 如何自定义实现asp.net身份的UpdateAsync方法?

    我正在执行自定义 asp net 身份 而不是使用 asp net 内置表 我已成功创建用户并实现自定义CreateAsync 现在我想用新的加密密码更新用户 所以我不知道如何提供自定义实现UpdateAsync method 这是我的桌子
  • 使用 Guice 和 JDBC 进行事务 - 解决方案讨论

    在我的应用程序中 我需要将纯 JDBC 与 Guice 一起使用 但是 Guice 不提供任何内置支持来管理事务 guice persist只提供基于JPA的支持 我无法使用 所以我尝试实现一个简单的解决方案来使用 Guice 和 JDBC
  • 如何在两个 Visual C++ 项目之间共享相同的产品版本?

    我有 2 个 Visual C 项目 它们都有一个 RC 文件 其中定义了现场产品版本 我如何才能使这两个项目从全球范围内获取此版本 全局RC文件或者有什么解决办法 对我来说最有效的是添加两个 解决方案项目 一个是 h 文件 defines
  • 在内核空间模拟鼠标点击

    我试图在内核空间中模拟键盘和鼠标点击 因此它们将无法在其他应用程序中被阻止 与用户空间模拟相反 为了实现这个目标 我发现this https github com jasonpang Interceptor库是 C 的包装器this htt
  • Mongoose 将 req 对象传递给中间件

    我正在为猫鼬编写一个中间件 它使用 pre 为每个查找对象执行query hook postSchema pre query function query next I want to access the req user object
  • Spring Boot - 加载初始数据

    我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么 我正在寻找的是能够用数据填充我的 H2 数据库的东西 例如 我有一个域模型 用户 我可以通过转到 users 来访问用户 但最初数据库中不会有任何用户 因此我必须创建它们 有没有
  • 在 Android 上处理 React Native、Navigator 中的后退按钮

    我有一个Navigator在 Android 反应本机应用程序中 我在用着navigator push 导航到不同的页面 后退按钮会弹出导航器并返回一页似乎很自然 但事实并非如此 它会退出应用程序 做反应原生Navigator确实没有后退按
  • 使用 xslt 获取 X 位置处的节点值

    如何在不使用 foreach 的情况下使用 xslt X 位置的节点值
  • 获取Golang正则表达式中括号内的所有子字符串

    我想使用正则表达式获取 go 中所有括号内的所有子字符串 作为字符串 foo bar foo baz golang 的示例 我想要 bar 和 baz 在Python中我可以做re findall lt foo bar foo baz go
  • 卡尔曼滤波器总是在第一时间预测 0,0

    以下代码用于从下到上扫描图像 然而 卡尔曼滤波器的预测在第一次时总是显示0 0 这样 它就会从底部到 0 0 绘制一条线 如何使路径 卡尔曼滤波器 更接近实际路径 以下代码和图像已更新 import cv2 import matplotli
  • 布局API版本命名

    我不知道这是如何工作的 如果我创建了一个名为layout v11这适用于 v11 以上的所有 api 版本还是仅适用于 v11 第二个我可以将文件夹命名为layout v11 v14仅对 v11 和 v14 API 使用此布局 后缀指定资源
  • 从 xamarin 将文件上传到 Web api 服务器 - 请求处理时间太长

    我正在使用 HttpClient 将二进制文件发布到 Azure 托管的服务器 对于大小不太大的文件 该请求需要很长时间才能传递 有时 当客户端因超时而取消任务时 服务器会收到请求 我使用以下代码异步上传数据 public async Ta