【问题标题】:Upload local file contents without page refresh上传本地文件内容而不刷新页面
【发布时间】:2012-04-20 08:21:40
【问题描述】:

我的网络流中有一个页面,我想在不刷新页面的情况下上传文件。我尝试为此使用 Ajax 调用,但失败了。我不知道如何将上传文件中的数据发送到服务器端/后端进行进一步处理。我正在使用 Spring MVC 框架,我不想使用 PHP。

谁能建议我可以完成工作的解决方案或一些示例代码?我对 JavaScript 很陌生。

还有一件事是我必须在去服务器端处理上传的文件后返回同一页面并从服务器端返回带有字符串的同一页面。这一切都发生在不刷新当前页面的情况下

任何建议都将受到高度赞赏。

【问题讨论】:

标签: ajax spring-mvc file-upload javascript


【解决方案1】:

假设您已经构建了表单并设置了服务器端控制器来处理上传,这个小 sn-p 应该会让您走向 AJAX-y 无刷新文件上传的荣耀!

//create a new FormData reference
//(note: you could use getElementById or querySelector)
var myForm = document.forms.myUploadForm; 
var fd = new FormData(myForm);

//create and open an XHR
var xhr = new XMLHttpRequest();
xhr.open("POST","http://www.example.url/the/path/to/your/upload/controller");

//set up event listeners (optional)
xhr.onreadystatechange = monitorStatusFunction;
xhr.onprogress = updateProgressBarFunction;

//send the form (w/ no page refresh!)
xhr.send(fd);

【讨论】:

  • 但如果我这样做,它将成为一种正常的发布方法....我的问题是,在服务器上进行一些操作后,我应该返回到与文件中的数据相同的页面一边......他们的我变得绝望......请帮助我
  • 你真的试过了吗?我一直使用这个sn-p,它让浏览器上传表单中的文件并且不刷新页面,所以它绝对是一个AJAX POST,而不是一个“正常”的。在服务器上处理文件后,您究竟希望文件发生什么?您想覆盖客户端磁盘上的原始文件吗?您想将其下载为新文件吗?你想在客户端做更多的处理吗?你想在页面的某个地方呈现它吗?您只想发送确认消息吗?抱歉,我想我不太明白您需要做什么......
  • 抱歉让你感到困惑......我真正想要的是,我有一个页面,我会要求客户上传文件,然后我必须阅读文件的内容服务器端处理它并根据文件的内容将字符串返回到同一页面。这一切都应该在不刷新页面的情况下发生
  • 我正在使用 Spring MVC 编写一个 Web 服务,该服务正是这样做的:上传文件,在服务器上操作其内容,然后将字符串发送回客户端页面而不刷新它。我在此处发布的这段代码几乎正是我在客户端运行以实现此目的的代码。我不明白它如何/为什么不是你想要的......再一次,你真的尝试过使用它吗?注意:如果您在用户按下表单上的提交按钮时调用此代码,则需要明确阻止默认提交按钮行为。否则,它应该可以正常工作。它对我有用!
  • 我很乐意为您提供更多帮助,顺便说一句 - 我希望在开始执行此操作时能获得更多帮助!但最好不要继续在这里的 cmets 中进行对话 - 随时给我发电子邮件!
【解决方案2】:

我挣扎了很多天,最后我想出了一个可能不是最佳解决方案的解决方案,但我将其发布在这里,以便像我这样的任何人都可以从中获得帮助..

满足我的所有要求

我从我的 jsp 页面打开了一个 jsp 页面作为弹出窗口,从该页面我登陆我的控制器并在服务器端完成我的工作并返回一个字符串,具体取决于上传到同一弹出页面的文件的内容并从弹出窗口中我将该字符串传输到我的父页面。

因此我的工作在没有刷新页面的情况下完成... 执行此操作的步骤 1.打开如下弹窗

window.open('//要打开的jsp页面的url','//somename','//弹出页面的属性');

2.从弹出窗口登陆你的控制器,然后返回到同一个 jsp 页面,其中包含我想要的 jsp 页面中的字符串。 3.将该字符串传递给父页面,如下所示。

window.open.urparentjspfuntion(valuefromcontroller);

4.在父页面中定义一个函数来做任何你想做的事.....

我希望这个解决方案可以帮助像我这样的人......

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 2020-07-28
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2015-06-18
    相关资源
    最近更新 更多