我被困在上传不同页面的文件。在一个页面我打开一个弹出窗口,我要求用户浏览并选择文件,关闭选项,弹出窗口关闭,然后我想从主页面上传文件,不是从弹出窗口。我怎样才能做到这一点? 我使用以下代码获取上传的文件:
HttpFileCollection uploads = HttpContext.Current.Request.Files;
如何从主页面访问此值,我在弹出窗口中使用HttpFilecollection
。
答案 0 :(得分:2)
如果您考虑一下,您的问题实际上并不是如何从其他页面上传文件。它是“如何在ASP.NET中将值从一个页面传递到另一个页面?”
好消息是,网上有一百万篇文章解释了如何做到这一点:
湾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实现它的一些链接
http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti_1.html
http://algorithmist.wordpress.com/2007/10/19/flex-file-upload-with-aspnet/
希望这会有所帮助。
答案 7 :(得分:0)
HI, 您可以使用
将文件名传递给父窗口<强> opener.SomeFunction 强>
并将文件名作为数组传递给函数。
希望这有帮助