文件在不同页面上传

时间:2009-04-27 04:37:41

标签: c# asp.net file-upload

我被困在上传不同页面的文件。在一个页面我打开一个弹出窗口,我要求用户浏览并选择文件,关闭选项,弹出窗口关闭,然后我想从主页面上传文件,不是从弹出窗口。我怎样才能做到这一点? 我使用以下代码获取上传的文件:

HttpFileCollection uploads = HttpContext.Current.Request.Files;

如何从主页面访问此值,我在弹出窗口中使用HttpFilecollection

8 个答案:

答案 0 :(得分:2)

如果您考虑一下,您的问题实际上并不是如何从其他页面上传文件。它是“如何在ASP.NET中将值从一个页面传递到另一个页面?”

好消息是,网上有一百万篇文章解释了如何做到这一点:

一个。 Cross page postbacks

How to pass values between ASP.NET pages (MSDN)

℃。 Another article by Steve C. Orr on Passing values

您需要传递的值是从弹出页面到父页面的HttpFileCollection。然后,您可以遍历集合中的每个HttpPostedFile,并根据您的逻辑调用Save

答案 1 :(得分:1)

在JavaScript中,window有一个名为“opener”的属性,它指的是父窗口。

因此,您可以调用 window.opener 从弹出窗口访问父窗口,并执行您想要实现的任何操作。

答案 2 :(得分:1)

要使用JavaScript,您可以使用document.createElement方法。

要使用ASP.NET,请使用HtmlTableRow类,并动态地向表中添加行。

我建议使用JavaScript方法。

答案 3 :(得分:0)

您可以尝试使用{2.0}中的新功能cross-page postbacks

答案 4 :(得分:0)

这是不可能的。

上传必须由上传控件所在的页面完成。您无法将信息传输到另一个窗口,而是让它进行上传。

当上传发送到服务器时,您必须立即处理。上传的文件只存在于该请求的文件集中,如果您在处理该请求时没有处理文件数据,它就会消失。

因此,如果您在弹出窗口中有上传控件,则弹出窗口必须进行上传。发布弹出页面时,您必须处理上传的文件,但您当然可以在响应中提供有关上传文件的一些信息,弹出窗口可以在弹出窗口关闭时发送到主页面。

答案 5 :(得分:0)

问题是出于安全原因,您无法设置input type =“file”元素的值。你不希望邪恶的网站试图上传你的C:\ whateverfiletheywant.dat

所以你必须在弹出窗口中上传到临时上​​传目录,并通过javascript(window.opener)发送用户上传到主表单的文件名

我已多次这样做了。

如果我必须在弹出窗口中上传内容,就会发生类似的事情。

List<string> filesUploaded = new List<string>();
foreach (HttpPostedFile file in HttpContext.Current.Request.Files)
{
    if (file.ContentLength <= 0)
        continue;

    string filename = String.Format("{0}.jpg",Regex.Replace(Guid.NewGuid().ToString(), "[^A-Za-z0-9]*", String.Empty));
    file.SaveAs(Path.Combine(Server.MapPath("/upload/temp/"), filename));
    filesUploaded.Add(filename);
}
Response.Write(String.Format("<{0}>window.opener.FilesUploaded([{1}]);</{0}>","script", String.Join(",",filesUploaded.ToArray()).TrimEnd(new char[]{','})));

* note ... asp不喜欢你的c#代码中的脚本标签,所以这就是为什么script关键字在String.Format中

答案 6 :(得分:0)

根据我的经验,我非常喜欢telerik上传控件,它提供了很多东西,如验证,文件大小,允许的扩展等等。但是如果你想要实时进度,你最好使用银灯或基于闪存的上传控制,telerik提供了这个。

以下是使用flash + ASP.Net实现它的一些链接

希望这会有所帮助。

答案 7 :(得分:0)

HI, 您可以使用

将文件名传递给父窗口

<强> opener.SomeFunction

并将文件名作为数组传递给函数。

希望这有帮助