2

我正在编写一个提交表单的 Web 应用程序(其中一个字段是 mulitpart/form-data,因此显然必须使用 POST 而不是 GET,因为文件可能非常大)。其中一个字段有点事务/upload_id,另一个显然是文件内容。上传时,必须显示进度条。

已知事实表明,参数的顺序通常是未定义的,这意味着(文件内容/upload_id)中的任何一个都可能先出现。

是否有任何可接受/推荐的方式使浏览器在发送文件内容之前发送upload_id?

它是否被认为是正确的实现 - 期望 upload_id 首先出现或者有更好/最常见/更正确的方法来处理问题?在那种情况下 - 听到一些细节会很棒。

更新:我的服务器端语言是 Java/Servlets 3.0

4

3 回答 3

1

好吧,更好的答案(不使用过滤器)是将upload_id(s)作为URL的一部分(在'?'之后)发布,即使在发出POST请求时也是如此。在这种情况下,它们将始终在文件内容之前处理。

于 2011-05-08T10:29:27.763 回答
0

您不必担心参数的发送顺序。如果是这样,那么您的服务器端代码非常脆弱。

多部分请求将包含传入的每个表单字段的字段名称。使用名称来引用该字段,而不管它是按什么顺序发送的。

如果您正在手动解析帖子正文,我建议您查看现有项目,例如Apache FileUpload,它们将其抽象出来。

于 2011-05-07T23:45:28.797 回答
0

也使用 servlet,在我的情况下,我想在开始流式传输文件之前在我的 servlet 中运行我的 CSRF 过滤器:如果过滤器失败,我可以在上传 20gb 视频文件之前终止请求,而不是默认 PHP 实现,服务器仅在解析整个请求后才访问您的脚本。

这对我来说有点小题大做,但在某些情况下,我不得不这样做,我作弊并将非文件请求参数放入 URL 中,并且在每种情况下(使用几乎所有浏览器,我'已经测试过)服务器上请求参数的迭代器(我在流模式下使用commons fileupload)在接收文件数据之前首先接收到非文件请求参数。有些脆弱,但并非不可行。

我假设如果您以文件<input>作为最后一项来订购请求参数,您将获得相同的行为。

于 2011-05-08T06:33:16.277 回答