如何使用 Yesod 和 Http-Conduit 将 FileInfo 发布到 Web 服务?

2023-12-20

我正在使用默认的 Yesod 脚手架项目。
我创建了一个页面,显示一个简单的表单来上传文件。
(该表单可能会使用 Javascript 在客户端上创建。)
为简洁起见,该表单有一个文件输入:

<form method="post" action=@{UploadR}>
   <input type="file" name="myfile">
   <button type="submit">

我的目标是处理表单数据,然后将文件上传到网络服务。
我处理表单没有遇到任何问题,我关心的是与网络服务的交互。
例如,给定以下 Yesod 处理程序:

postUploadR :: Handler Html
postUploadR = do
    mgr <- fmap httpManager getYesod
    fi  <- runInputPost $ ireq fileField "myfile"
    let fSource = fileSource fi
        fName   = fileName fi
    req <- parseUrl "http://webservice/upload"
    let areq = req { method = methodPost
                   , requestBody = requestBodySourceChunked fSource
                   }
    res <- httpLbs areq mgr
    defaultLayout $ do
      setTitle "file uploaded"
      [whamlet|
       <h3> Success
       <p> You uploaded #{fName}.
      |]

Web 服务返回错误:fail post content-length,但其他一切都按预期进行。也许服务器不支持分块请求正文?


我认为您对分块请求正文的猜测是正确的。你需要做的是:

  • 将上传的内容流式传输到临时文件中。
  • 获取该文件的大小。
  • Use requestBodySource并提供文件长度及其内容。

幸运的是,步骤(1)和(2)可以很容易地由接收缓存长度 http://haddocks.fpcomplete.com/fp/7.8/20140916-162/conduit-extra/Data-Conduit-Binary.html#v:sinkCacheLength功能。你最终会得到类似的结果:

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

如何使用 Yesod 和 Http-Conduit 将 FileInfo 发布到 Web 服务? 的相关文章

  • Response.Redirect 并不总是重定向

    我们在一个工作不一致的页面上有一个简单的 Response Redirect IIS 6 0 大多数情况下 它会正确重定向 但我们收到一些用户抱怨 他们没有重定向 而是看到 302 对象移至此处 页面 该页面显示标题信息以及正确的位置 如果
  • 与 Functor 不同,Monad 可以改变形状?

    我一直很喜欢以下关于单子相对于函子的力量的直观解释 单子可以改变形状 函子不能 例如 length fmap f 1 2 3 总是等于3 然而 对于单子来说 length 1 2 3 gt gt g往往不等于3 例如 如果g定义为 g Nu
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • 如何解析来自基于 C 的 Web 服务器的 HTTP 请求

    我有一个编程项目 我必须创建一个处理 HTTP 请求的多线程 Web 服务器 我刚刚学习了套接字编程 并且运行了一个客户端和一个服务器 我想知道解析 HTTP 请求标头的最佳方法是什么 我看到了这个 如何用C 解析http请求 https
  • PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?

    我有一个 C 应用程序 它与基于 PHP 的 SOAP Web 服务进行通信以进行更新和许可 我现在正在开发一个反馈系统 供用户通过软件自动提交错误和跟踪日志 根据我之前发布的问题 我认为 Web 服务将是实现此目的的最佳方法 最有可能以最
  • 如何与更高级别的类型合作

    玩弄教堂的数字 我遇到了无法指导 GHC 类型检查器处理高阶类型的情况 首先我写了一个版本 没有任何类型签名 module ChurchStripped where zero z z inc n z s s n z s natInteger
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • Haskell 中的内部爆炸模式是否总是强制使用外部构造函数?

    在 Haskell 中 是否存在对于数据类型 LANGUAGE BangPatterns import Control DeepSeq data D D Int 实例 instance NFData D where rnf D 与具有另一个
  • 当查看 X-Auth-Token 与 Authorization 标头之间的差异时,哪个是首选?

    下面两个标题有什么区别 哪一个是首选 X Auth Token dadas123sad12 Authorization Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ Authorization是客户端使用的主要标头认证如
  • Web API GET 请求中的电子邮件地址

    我正在开发在 ASP NET Web API 中实现的 REST API 我们想要支持的一个场景是执行GET通过电子邮件地址请求一些用户信息 理想情况下 客户应该能够执行以下操作 GET api v1 users email your em
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • PHP 错误请求中 HTTP 请求失败

    我可以直接从浏览器请求 URL Web 服务 WS 但是当我在代码中使用 file get contents 或 fopen 方法时 我收到一条错误消息 有人有不使用curl的解决方案吗 public function sendHttpRe
  • Haskell if-then-else 条件中的“解析输入错误”

    当我尝试编译以下 do 块时 它会抛出错误 输入 conn 上的解析错误 我尝试了许多不同的 if then else 语句配置 但均无济于事 在我添加条件之前 数据库逻辑就起作用了 所以这没有问题 else 中是否有太多行 有没有办法在不
  • 访问 public_html 级别之外/以下的文件

    如何通过 url 访问文件 home uzair etc index php 即使我运行域 something com 它显示了 home uzair public html index php 这个文件 任何人请帮助我如何访问放置在 ho
  • Haskell:确定函数数量的函数?

    可以写一个函数吗arity a gt Integer确定任意函数的数量 使得 gt arity map 2 gt arity foldr 3 gt arity id 1 gt arity hello 0 是的 这可以非常非常容易地完成 ar
  • Web 服务调用后响应对象中的属性为 null

    我可以在 Fiddler 中看到该对象 但该对象在我这边没有反序列化 有没有人见过这个 响应为空 或 响应包含空值 或 请求为空 或 请求包含空值 几乎总是意味着命名空间不匹配 例如 响应可能包含
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • 找不到 Java 类型 myPackage.B 类和 MIME 媒体类型 application/octet-stream 的消息正文编写器

    我是 RESTful Web 服务的新手 正在尝试更新我的 OneToMany来自独立客户端应用程序的关系 但我无法做到这一点 我正在使用 Glassfish 3 1 1 附带的 JAX RS 的 Jersey 实现 我有课A有一个 One
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • seq在haskell中代表什么

    我是 Haskell 的新手 刚刚进入惰性世界编程 我读到seq函数非常特殊 因为它强制使用严格的评估 以便在某些情况下更加有效 但我就是找不到什么seq代表字面意思 也许严格评估Q 它应该提醒您 顺序 或 顺序 因为它允许程序员指定其参数

随机推荐

  • 如何在UI底部的固定位置设置一个按钮?

    我希望一个按钮始终出现在 UI 页脚的固定位置 总是 无论它上面是否有组件 请在您的主布局下选择一个相对布局 将其高度和宽度设置为填充父项 并将其重力设置为底部 然后将任何文本视图或任何您想要的按钮放入其中
  • setup.py - 安装后将模块符号链接到 /usr/bin

    我几乎完成了 python 包的开发 并且还使用 distutils 编写了基本的 setup py usr bin env python author Prahlad Yeri description Small daemon to cr
  • 在外部 JavaScript 文件中使用 KnockoutJS ViewModel

    如何在外部 JS 文件中创建 KO JS ViewModel 然后在 html 文件中使用它 这看起来是一件很简单的事情 但我无法让它工作 也找不到任何关于如何做到这一点的明确信息 如果我忽略了 我会道歉 如果有人能指出我的答案 我会删除它
  • 使用字段数将文件拆分为更小的文件

    我很难将一个大的 50GB csv 文件分解成更小的部分 每行有几千个字段 一些字段是双引号中的字符串 其他字段是整数 小数和布尔值 我想逐行解析文件并按每行中的字段数进行分割 字符串可能包含多个逗号 例如 以及许多空字段 1 30 50
  • Delphi 2007 和 Logitech 网络摄像头驱动程序

    不久前 我遇到了 Delphi 2007 在 Logitech 网络摄像头驱动程序运行时无法运行和调试应用程序的问题 显然 罗技驱动程序会在每个正在运行的进程中插入一个存根 从而弄乱调试器的偏移量 已经一年多了 这仍然是一个问题吗 罗技是否
  • 如何在不调用 java.lang.String 的情况下检查 clojure 中字符串的相等性?

    clojure 有没有办法检查字符串的相等性 即我需要知道它们的内容是否相等 而不是位置 thanks Clojure 中的平等 函数 总是测试值 而不是身份 所以两个字符串是 如果它们有相同的内容 对于大多数 Java 类型 包括 Str
  • 使用 MongoDB 代替 MS SQL Server 的优点和缺点 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 NoSQL 世界的新手 正在考虑将 MS Sql Server 数据库替换为 MongoDB 我
  • 如何在 build.gradle 中检索 ADB 的路径

    我尝试通过启动应用程序gradle task task runDebug dependsOn installDebug run task run type Exec commandLine adb shell am start n com
  • 使用附加值扩展枚举

    延长期限的常见做法是什么enum在C语言中 我有enum来自其他包含的内容 并希望用一些值来扩展它们 希望以下示例能够为我想要实现的目标提供直观的信息 include
  • std::thread 不是使用 Eclipse Kepler MinGW 的命名空间 std 的成员

    我正在尝试编译一个简单的 C 程序 该程序在 eclipse kepler mingw 4 8 1 和 win32 上使用 std thread 我希望在多年的 Windows 开发之后 有一天能将开发转移到 Linux include t
  • 如何在c中使用fread()读取结构体的内容

    我有以下代码 我试图读取文件的内容并显示它并写入另一个文件 我的问题是我在屏幕上看到的内容与文件的内容完全不同 我已经把文件的部分内容和显示的结果的部分 include
  • CDN 库在 Chrome 中被屏蔽

    我在网站上使用传单 OSM 制作小地图 该网站本身可通过 HTTPS 访问 而传单库 据我所知 只能通过 HTTP 连接检索 现在 Chrome 不包含该库 并在控制台中显示以下消息 blocked The page at https ex
  • VBA计算数组的非空元素

    菜鸟问题 我想计算数组的非空元素 我的尝试 Dim Arr 1 To 15 As Double populating some of the elements of Arr Dim nonEmptyElements As Integer i
  • Android 中的 AdMob“AdView 缺少必需的 XML 属性‘adSize’”

    我正在尝试在我的应用程序中实施 AdMob 但不知道它以某种方式显示此错误 并且我的 R java 文件因此没有生成 我已经尝试了所有方法来解决这个问题 例如 Clean Build Build All 但非对我有用 按照我的代码片段 其中
  • 自定义类型作为主键

    我目前正在 Visual Studio 2015 上使用 EF6 代码优先 我正在开发一个数据库 我想使用用户定义的类型作为主键 这是我想要的一个简单示例 public class ObjectIdType public string id
  • 如何使用Python向Oracle数据库插入100万行?

    我有大约 100 000 到 1 000 000 行要插入到 Oracle18c 数据库中 我对 Oracle 和这种数量级的数据还很陌生 我认为必须有一些最佳的方法来做到这一点 但现在我只能实现逐行插入 def insertLines c
  • Firefox ~84 中的“Paint Flashing Tool”在哪里?

    许多较旧的博客文章和MDN 文档 https developer mozilla org en US docs Tools Paint Flashing Tool值得一提的是 Firefox 有一个调试工具可以突出显示绘制的区域 我运行的是
  • Inverse glob - 根据文件名对通配符字符串进行逆向工程

    我想从一对文件名生成通配符字符串 有点像逆全局 例子 file1 some foo file txt file2 some bar file txt assert some file txt inverse glob file1 file2
  • 旋转到横向时 iPhone 视图控制器视图向下移动 20 像素

    我正在尝试使用 UIViewController 和 UITabBar 实现自定义 tabbarcontroller 到目前为止 一切工作正常 除了当我将设备旋转到横向时 UIViewController 将整个视图向下移动 20 像素 在
  • 如何使用 Yesod 和 Http-Conduit 将 FileInfo 发布到 Web 服务?

    我正在使用默认的 Yesod 脚手架项目 我创建了一个页面 显示一个简单的表单来上传文件 该表单可能会使用 Javascript 在客户端上创建 为简洁起见 该表单有一个文件输入