flex 文件下载和上传
思路介绍:
一、 文件上传
上传文件flex端处理:
1、上传文件第一步——打开文件。
首先需要创建一个FileReference对象:
private var myFileReference:FileReference = new FileReference();
在FileReference中有一个browse()函数,这个函数的作用就是打开一个windows文件选择框,可以选择需要上传的文件。在打开的文件选择框中可以指定选择文件的类型,这是通过FileFilter来实现的。创建一个FileFilter对象,作为browse函数的参数,这样就可以指定选择文件的类型了:
var imagesFilter:FileFilter = new FileFilter("Images(*.jpg,*.gif,*.png)", "*.jpg;*.gif;*.png");
myFileReference.browse([imagesFilter]);
2、上传文件第二步——上传文件
文件选择了之后会触发Event.SELECT事件,所以需要在myFileReference对象上注册SELECT事件的监听:
myFileReference.addEventListener(Event.SELECT, onSelect);
onSelect是一个监听函数,在这个函数中可以得到选择的文件的名字。由于安全沙箱的原因,只能得到选择的文件名,不能得到完整的文件路径。选择了需要上传的文件后,需要调用upload()函数上传选择的文件:
myFileReference.upload(uploadURL,myFileReference.name);
upload的参数uploadURL是一个URLRequest对象,这个对象指定了上传文件用的URL,myFileReference.name就是选择的文件的文件名。
3、上传文件第三步——上传进度
一般情况下,在上传文件的过程中需要显示一个表示上传进度的进度条,这样可以有一个很好的用户体验。要想显示上传进度,可以有两种方式。第一种就是监听FileReference对象的process事件,在process事件的监听函数中可以得到上传的进度,然后可以设置进度条的进度。第二种方式就是把FileReference对象与进度条对象进行绑定,进度条会自动监听FileReference对象的process事件,来显示上传进度。
4、上传文件第四步——上传结束
有的时候需要在文件上传结束后给用户一个提示,告诉用户文件已经上传结束了。这就必须得对FileReference对象的COMPLETE事件进?......
1文件下载:
var file=new FileReference();
var downloadURL:URLRequest=new URLRequest("http://10.1.31.36/data/"+1.zip");//对应服务器上的文件路径,要发布哦。
configureListeners(file); //添加下载过程中的监听信息
file.download(downloadURL);
private function configureListeners(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.CANCEL, cancelHandler);
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(Event.SELECT, selectHandler);
}
2,文件的上传
var file:FileReference = new FileReference();
- internal function initapp():void //这是在程序初始化时对file创建监听
- {
- file.addeventlistener(event.select,onselected);
- file.addeventlistener(event.complete,oncompleted);
- file.addeventlistener(progressevent.progress,onprogress);
- }
- 或者是
- protected override function createchildren():void //这是在程序完成之前创建监听
- {
- file.addeventlistener(event.select,onselected);
- file.addeventlistener(event.complete,oncompleted);
- file.addeventlistener(progressevent.progress,onprogress);
- }
internal function onselected(evt:event):void
{
statetext = "选择了文件" + file.name;
}
internal function oncompleted(evt:event):void
{
statetext = "上传完毕!";
}
internal function onprogress(evt:progressevent):void
{
statetext = "已上传 " + math.round(100 * evt.bytesloaded / evt.bytestotal) + "%";
}
//响应上传事件!
添加 file.brower()响应事件触发文件选择。
脚本如下:将其发布到iis上或tomcat上,访问路径就是上面的地址
在.net 上创建一个网站
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string uploadFolder = "upload"; // 上传文件夹
HttpFileCollection files = Request.Files;
if (files.Count == 0)
{
Response.Write("请勿直接访问本文件");
Response.End();
}
string path = Server.MapPath(uploadFolder);
// 只取第 1 个文件
HttpPostedFile file = files[0];
if (file != null && file.ContentLength > 0)
{
// flash 会自动发送文件名到 Request.Form["fileName"]
string savePath = path + "/" + Request.Form["fileName"];
file.SaveAs(savePath);
}
}
}
控制上传文件大小和上传时间需要在配置文件上添加以下节点
<system.web>
<httpRuntime maxRequestLength="409600" executionTimeout="10000" />
</system.web>
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步