【问题标题】:uploading files by url通过 url 上传文件
【发布时间】:2024-05-16 07:55:02
【问题描述】:

我需要实现一个将文件上传到服务器的 servlet,我意识到每个人都说它必须是关于上传文件的 POST 方法而不是 GET 方法。但是,即使请求来自 POST 方法,有没有办法上传文件并让请求的参数显示在 url 中?如果没有,还有其他方法吗?

目前我使用post方法的servlet是http://example.com/FileUpload/UploadFile

我想要的是 http://example.com/FileUpload/UploadFile?id=125&fileNum=5

感谢您的意见。

【问题讨论】:

  • POST 是将文件发送到服务器的推荐方式;原因之一是 GET 参数的长度有限。

标签: java servlets file-upload


【解决方案1】:

只需 POST 到

http://example.com/FileUpload/UploadFile?id=125&fileNum=5

而不是

http://example.com/FileUpload/UploadFile

没有不能发布到具有参数的 URL 的限制。您可以像现在一样处理发布数据,此外,您还可以获取获取参数。

【讨论】:

  • 你有链接或更多文档让我学习如何这样做吗?
  • 你不清楚哪一部分?你目前是怎么做的?而且,您打算如何获取 id 和 fileNum 值?
【解决方案2】:

我认为这不是一个优雅的解决方案,但您可以使用 JavaScript 在提交表单元素之前更改其操作以包含查询字符串参数。

表单将类似于:

<form method="POST" id="myForm" onSubmit="submitMyForm(this)>
   <input type="text" id="id">

然后你需要 JavaScript 来改变表单的动作元素:

function submitMyForm(theForm) {
  theForm.action="http://example.com/FileUpload/UploadFile?id=" + 
         getElementById("id").value;
  theForm.submit();
}

有什么原因你不能只用 post 提交参数并在服务器端将它们拉出来?

【讨论】:

  • "有什么原因你不能只用 post 提交参数然后把它们拉到服务器端吗?"我将有多个客户端(非 gui)将使用 url 上传文件。所以我认为一个很好的方法是将文件 ID 或你在 url 中的内容。
【解决方案3】:

或者,如果您发布多部分/表单数据,您可以在文件中包含多个参数。参数与文件一起作为帖子正文的一部分发送。

【讨论】:

    【解决方案4】:

    您可以在 POST 中发送参数和文件。例如,在 html 中,您可以有一个具有此值的表单,它们可以是隐藏类型。 在 servlet 中,您可以像使用 GET 一样获取值。

    使用 POST 方法也更好,因为用户无法更改 URL 方向栏中的值。

    【讨论】: