4

背景:

我正在为我的 CS 部门做一个本科生研究项目。该项目是生物系的一个网站,一个关键功能是生物学生能够上传他们自己的.xml文件,然后使用 Matlab 在服务器端为他们构建一个*模型。

前端位于 ASP.NET、javascript 和 C# 环境中。我与这个项目的一点关联是我对这些系统、工具和语言的所有了解。

问题:

.xml我之前提到的文件可能需要几个小时才能上传和构建。我的教授希望用户能够使用已经完成的模型继续页面,同时将新模型发送到后台,并且用户在完成时会收到一封电子邮件。我找到了发送电子邮件的材料,但没有找到继续页面的材料。

我听说了一些关于使用 AJAX 加载页面的信息?

4

4 回答 4

1

在您的页面上放置文件上传控件

<asp:FileUpload ID="FileUpload1" runat="server"/>

构建一个 http 处理程序来处理文件上传:

public class Handler : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        HttpPostedFile fileToUpload = context.Request.Files["Filedata"];
        string pathToSave = HttpContext.Current.Server.MapPath("~/Files/")
                            + fileToUpload.FileName;
        fileToUpload.SaveAs(pathToSave);

        //Process file
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}

看看是否可以将uploadify之类的上传插件集成到项目中(需要jQuery)。

<script type = "text/javascript">
$(document).ready(function()
{
     $("#<%=FileUpload1.ClientID %>").uploadify(
     {
       'swf': 'Scripts/uploadify.swf',
       'uploader': 'Handler.ashx',
       'auto': true,
      'buttonText': 'Select File(s)'
     });
});
</script> 

如果你不能做到这一点,你需要了解 ajax 是如何工作的

Ajax 通常使用 XMLHttpRequest,它不允许您对本地文件进行编码并将其发送到服务器。
您可以使用 Flash swf 来处理同一页面上的上传,或者使用具有不可见 1x1 iframe 目标的表单。

我在这个博客上找到了关于在 asp.net 中上传文件的代码

于 2012-10-19T04:36:32.633 回答
0

我认为打开一个小的 i-frame,它实际上会进行上传,会让你当前的页面继续工作。

因此,在您当前的页面上,您要求提供文件位置和文件名等所有信息,然后在 i-frame 中打开一个新页面。让 i-frame 知道源文件/文件夹、目标文件/文件夹,并让它在后台工作。因此,现在您的当前页面可以自由地继续其工作。

希望有帮助。

于 2012-10-19T05:05:24.707 回答
0

使用无头 Java 上传小程序。在 iFrame 中加载文件传输小程序,让用户启动文件传输,当用户想要浏览网站的其余部分时,不要重新加载包含 Java Applet 的 iFrame(它将上传文件)。传输完成后,执行 JAvaScript 调用以关闭 iframe。

以下示例使用 FileCatalyst 的 Java Applet,但该想法实际上适用于任何其他 Java FTP Applet 或 ActiveX

<script>
    var browsePath = "";

    function browseAndAdd() {
      browsePath = document.FileCatalyst.browseLive(true);
   }

    function upload() {
    document.FileCatalyst.uploadLive();
   }

   function clearQueue() {
     document.FileCatalyst.clearQueue();
   }
 </script>

 <!--Uses onClick for demonstration only-->
 <form id="uploadform">
  <!--Launch a browse dialog and add the selected file to the queue-->
 <input type=button onClick="javascript:browseAndAdd();" value="Browse and Add to Queue" />

    <!-- Force upload of whatever is currently found in the transfer queue -->
    <input type=button onClick="javascript:upload();" value="Upload">

   <!-- Clear transfer queue (can be called only if no transfers are in progress) -->
    <input type=button onClick="javascript:clearQueue();" value="Clear Queue">
   </form>

对缺少缩进表示歉意,我发现用于插入代码片段的 stackoverflow 标记对用户不太友好。

于 2012-10-20T15:27:24.980 回答
-1

您需要理想地设置某种异步处理。我个人喜欢使用Celery和 RabbitMQ 进行异步和消息传递。

于 2012-10-19T02:07:01.987 回答