ファイルアップロードコントロールFileuplad(ファイルアップロードを実現し、データベースに書き込む)

8993 ワード

まず、Fileupladというファイルのコントロールアップロードのいくつかの大失敗を説明します.
1.アップロード後はF 5で更新し、繰り返し提出する
2.提出後に後退ボタンを押してFileupladの中の情報はまだあります.
3.マルチファイルアップロードはサポートされていません.
4.アップロード前にファイルサイズを検出できません.
解決方法:
1.iframeをサブページで実現またはリダイレクト文(Request.RawUrl)を作成する.)
2.JavaScript文でfileupladのval情報をクリアする
4.jsコードを利用する:fileuplad.files[0].sizeコードで解決するが、ブラウザでhtml 5をサポートする必要がある.
また、デフォルトのアップロードファイルの最大値を変更する場合、アップロード時間はweb.co nfigファイルで変更する必要があります.
 以下はiframeを利用してファイルをアップロードしてデータベースに書き込むルーチンです.
iframe.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="iframe_upload.aspx.cs" Inherits="uploadfiles_iframe_upload" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h2>upload          </h2>
    <iframe frameborder="0" width="100%" src="i_upload.aspx"></iframe>
    </div>
    </form>
</body>
</html>
i_upload.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="i_upload.aspx.cs" Inherits="uploadfiles_iframe_upload" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="../jquery-1.11.3.min.js" type="text/javascript"></script>
    <title></title>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#fup1").val(""); // fileupload  val    
        });

        function checkdata() {
            if ($("#fup1").val() == "") {
                alert("     ");
                $("#fup1").focus(); //     fileupload   
                return false;
            }

            var _file = document.getElementById("fup1"); //       ID    
            var _size = _file.files[0].size; //            

            if (_size > 4000000) {
                alert("    ");
                $("#fup1").focus();
                return false;
            }

            return true;
         }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        
        <asp:FileUpload ID="fup1" runat="server" />
        
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" OnClientClick="return checkdata()" />
        
    </div>
    </form>
</body>
</html>
i_uplload.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class uploadfiles_iframe_upload : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["_tempFiles"] = fup1.PostedFile; //     session
        Response.Redirect("i_info.aspx"); //  i_info  
    }
}
i_info.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="i_info.aspx.cs" Inherits="uploadfiles_iframe_upload" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    title:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
    fc_id:<asp:Label ID="lb_fcid" runat="server" Text="Label"></asp:Label><br/>
    fc_name:<asp:Label ID="lb_fcname" runat="server" Text="Label"></asp:Label><br/>
    targDir:<asp:Label ID="lb_tdir" runat="server" Text="Label"></asp:Label><br/>
    targPath:<asp:Label ID="lb_fcpath" runat="server" Text="Label"></asp:Label><br />
    </div>
    <asp:Button ID="Button1" runat="server" Text="  " onclick="Button1_Click" />
    </form>
</body>
</html>
i_info.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.OleDb;

public partial class uploadfiles_iframe_upload : System.Web.UI.Page
{

    string str_cnn = "Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=";
    string str_sourcefile = "~/uploadfiles/data.mdb";
    OleDbCommand cmd;
    OleDbConnection cnn;
    OleDbDataReader deter;
    string str_sql;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["_tempFiles"] == null)
        {
            Response.Redirect("i_upload.aspx");
        }
        HttpPostedFile _myfiles = (HttpPostedFile)Session["_tempFiles"]; //  session,  _myfiles 
        string _ext = Path.GetExtension(_myfiles.FileName).ToLower(); //        ,      


        string str_conn = str_cnn + MapPath(str_sourcefile);
        cnn = new OleDbConnection(str_conn);

        cnn.Open();
        //     
        lb_fcid.Text = "1";  
        lb_fcname.Text = "  ";
        lb_tdir.Text = "~/uploadfiles/  ";

        str_sql = "SELECT * FROM T_FILE WHERE fc_ext like '%" + _ext + "%'";//          
        cmd = new OleDbCommand(str_sql, cnn);
        deter = cmd.ExecuteReader();
<span style="white-space:pre">	</span>//    
        while (deter.Read())
        {
            lb_fcid.Text = deter["ID"].ToString();
            lb_fcname.Text = deter["fc_name"].ToString();
            lb_tdir.Text = deter["fc_path"].ToString();
        }

        TextBox1.Text = _myfiles.FileName.ToString();
        lb_fcpath.Text = MapPath(lb_tdir.Text) + DateTime.Now.ToOADate() + _ext; //      

        cnn.Close();

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string _targPath = lb_fcpath.Text;
        string _targDir = lb_tdir.Text;

        try 
        {
            Directory.CreateDirectory(MapPath(_targDir)); //        ,       
            ((HttpPostedFile)Session["_tempfiles"]).SaveAs(_targPath);//   

        }
        catch { }

        if (File.Exists(_targPath)) 
        {
            string _fname, _fcid, _title;
            _fname = Path.GetFileName(lb_fcpath.Text);
            _fcid = lb_fcid.Text;
            _title = TextBox1.Text;

        string str_conn = str_cnn + MapPath(str_sourcefile);
        cnn = new OleDbConnection(str_conn);

        cnn.Open();
<span style="white-space:pre">	</span>//     
        str_sql = "INSERT INTO T_FILEINFO(f_name,f_path) values "+"('"+_fname+"','"+_title+"')";
        cmd = new OleDbCommand(str_sql, cnn);
        int i = cmd.ExecuteNonQuery();
        cnn.Close();

        if (i > 0) 
        {
            Session.Remove("_tempfiles");//  session
            Response.Redirect("i_down.aspx");
        }
        }
    }
}
i_down.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="i_down.aspx.cs" Inherits="uploadfiles_iframe_upload" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <p>    </p>
        <p>
            <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/uploadfiles/i_upload.aspx">    </asp:HyperLink>
        </p>
    
    </div>
    </form>
</body>
</html>