如何使得上传的文件保留原来的信息

 由于工作需要,最近在公司负责开发一个web系统,其中一个需求就是用户上传文件后,该文件的最后修改时间不能改变,经过一番探索之后,基本搞掂这个需求。现将试验用的代码(非完整代码)与大家分享,请高手指点,请asp.net菜鸟与我交流^_^


upload.aspx中的代码

<form id="form1" runat="server" method="post" enctype="multipart/form-data">
        <input id="File1" type="file" runat="server"/><br/>
        <asp:button ID="Button1"  runat="server" text="Button" οnclick="Button1_Click1" />

<asp:Label ID="Label1" runat="server" Text="Label" ></asp:Label>

 </form>

upload.aspx.cs中的代码

using System.IO;

protected void Button1_Click1(object sender, EventArgs e)
    {
        if ("" == File1.Value)
        {
            Label1.Text = "没指定文件";
        }
        else
        {
            string filepath = File1.Value;//获取要上传的文件在客户端的完整路径
          
            FileInfo fileinfo = new FileInfo(filepath);//文件信息对象,可用来设置或获取文件的各种信息
            Label1.Text = "";
            Label1.Text = fileinfo.LastWriteTime.ToString() + "<br/>";
            DateTime lastwritetime = fileinfo.LastWriteTime;//获得上传文件的最后修改时间
            string filename = Path.GetFileName(File1.Value);//获得上传文件的文件名
            string savePath = "E://WebSites//WebSite2//UploadFile//" + filename;//服务器端保存路径
            File1.PostedFile.SaveAs(savePath);//保存文件到服务器
            FileInfo uploadfileinfo = new FileInfo(savePath);//建立上传到服务器后的文件的FileInfo对象
            uploadfileinfo.LastWriteTime = lastwritetime;//修改为原来的最后修改时间
            Label1.Text += uploadfileinfo.LastWriteTime.ToString();
        }
    }

_____________________________________________________________________________________

很不好意思!上面的代码中犯了一个很低级的错误,贻笑大方了,没注意到一切都是在我的电脑上进行,模仿实际场景把文件放到Web服务器之后,到另一台机子上访问发现是错误的。我也不把上面的代码删掉,作为对自己的提醒。
在编码之前,请先把scrrun.dll(一般在scrrun.dll中)添加到bin文件夹中。

下面是经过实际测试可行的代码。

upload.aspx

<html>

<head>

<title>上传文件</title>

<script language="JavaScipt">

function submit()

{

  var fso = new ActiveXObject("scripting.FileSystemObject");

  var filePath = File1.value;

  var f = fso.GetFile(filePath);

  var lwt = Date.parse(f.DateLastModified);

  document.getElementById("lwtTextBox").value=lwt;

 
}

</script>

</head>

<body>

<form method="post" enctype="application/multipart" runat="server">

<input type="file" runat="server" id="File1"/><br/>

<input type="button" οnclick="submit;javascript:document.Forms[0]['webBtn'].click();">

<br/>

<asp:button id="webBtn" runat="server" OnClick="webBtn_Click"/>

<input type="text" id="lwtTextBox" runat="server"/>

</form>

</body>

</html>


upload.aspx.cs

...............

protected void webBtn_Click(object sender, EventArgs e)

{

    string lastwritetime = lwtTextBox.value;

    把lastwritetime转换成DateTime对象,lastModifiTime

    string FileSavePath = 服务端保存路径+Path.GetFileName(File1.value);

    File1.PostedFile.SaveAs(FileSavePath);

    FileInfo uploadFileInfo = new FileInfo(FileSavePath);

    uploadFileInfo.LastWriteTime = lastModifiTime;

}

总结:

实现保留源文件最后访问时间这一功能的难点在于,要在文件还没保存到服务器端之前就获取到文件的最后修改时间,然后把这一时间传送给后台代码,也就是客户端函数与服务器端函数之间的通信这一问题。

对于第一点,使用FileSystemObject对象就能够搞掂,对于第二点我花了一天的功夫才发现原来可以如下实现:

<input type="button" οnclick="submit;javascript:document.Forms[0]['webBtn'].click();">

即在客户端函数执行完毕后立即调用后台函数。但这需要多一个按钮,通过它的OnClick事件来调用对应的后台处理函数。

...............

上文是我凭记忆写的,肯定有很多小错误,但大体思路就是这样。如果各位朋友有兴趣试一试,请自行修改。如果有更好的方法,请留言与我交流,在下不胜感激。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值