ASP.NETはウェブページ版のミニゲームを実現
18142 ワード
今日はいい文章を見たので、一緒に分かち合いましょう.ファイルのアップロードとダウンロード機能を実現します.
ファイルのアップロードについて:ファイルがウェブサイトにアップロードされることについて、まず私たちが考えているのは何を通じてアップロードすることですか?ASP.NETでは、FileUploadコントロールを使うだけで完了しますが、デフォルトでは4 Mサイズのデータをアップロードすることができます.もちろん、webでアップロードすることができます.configファイルでは、次のように変更されます.
次は、今「ツール」がありますが、どうやってアップロードしますか?直感的にアップロードしたいファイルを先に選択すべきではないでしょうか?これはそうです.FileUploadコントロールから戻ると、クライアントで選択したファイルの情報が得られます.次に、このファイルを変更します(具体的には、得られたパスの下のディスクの情報を削除し、サーバ上の関連パスの下に変更しますが、ここでは元のファイルの名前を変更しません).そして関連するアップロード方法を呼び出せばいいです.
まずインタフェースファイルを見てみましょう
そして具体的な論理
アップロードを終えて、ファイルのダウンロードについてお話しします.ここでは主にDirectoryオブジェクトのGetFiles()メソッドを使用して、指定したパスの下にあるすべてのファイルの名前を取得できます.これによりlistBoxを入力して、そのファイルをダウンロードするかどうかを選択することができます.この时、あなたは少し疑問に思っているかもしれませんが、私は今どんなファイルがダウンロードできるか知っています.次のステップはどうやって実現しますか?実はここではセッションのストレージメカニズムを利用しています.それはリストボックスで選択したitemの内容をセッションの特定のkeyに記録することです.そうすれば、これらの情報がページ間でどのように伝送されているのか気にしなくてもいいです.ダウンロードしたい場所で直接取得すればいいだけです.最も重要なのはダウンロードのプロセスです.
次に、インタフェースのレイアウトファイルをダウンロードしましょう.
そして具体的な論理コード実装
注意:最終的にアップロードされたファイルはルートディレクトリの下のFileフォルダの下に表示され、ダウンロード時にもこのフォルダの下からダウンロードされます.
まとめ:この小さなプロジェクトの実践を経て、私はsessionがプログラミングにもたらした便利さを見て、FileUploadコントロールの威力も体得しました;しかし、これはすべてではなく、ここは氷山の一角にすぎない.広範な博友と一緒に進歩して一緒に向上することを望んでいます!
ファイルのアップロードについて:ファイルがウェブサイトにアップロードされることについて、まず私たちが考えているのは何を通じてアップロードすることですか?ASP.NETでは、FileUploadコントロールを使うだけで完了しますが、デフォルトでは4 Mサイズのデータをアップロードすることができます.もちろん、webでアップロードすることができます.configファイルでは、次のように変更されます.
<system.web>
<httpRuntime executionTimeout="240" maxRequestLength="20480"/>
</system.web>
// ,
次は、今「ツール」がありますが、どうやってアップロードしますか?直感的にアップロードしたいファイルを先に選択すべきではないでしょうか?これはそうです.FileUploadコントロールから戻ると、クライアントで選択したファイルの情報が得られます.次に、このファイルを変更します(具体的には、得られたパスの下のディスクの情報を削除し、サーバ上の関連パスの下に変更しますが、ここでは元のファイルの名前を変更しません).そして関連するアップロード方法を呼び出せばいいです.
まずインタフェースファイルを見てみましょう
<form id="form1" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<br />
<br />
<br />
<br />
<br />
<asp:ImageButton ID="ImageButton_Up" runat="server" OnClick="ImageButton_Up_Click" style="text-decoration: underline" ToolTip="Up" Width="54px" />
<asp:ImageButton ID="ImageButton_Down" runat="server" OnClick="ImageButton_Down_Click" ToolTip="Download" Width="51px" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
そして具体的な論理
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//a method for currying file updown
private void UpFile()
{
String strFileName;
//get the path of the file
String FilePath = Server.MapPath("./") + "File";
//judge weather has file to upload
if (FileUpload1.PostedFile.FileName != null)
{
strFileName = FileUpload1.PostedFile.FileName;
//save all the message of the file
strFileName = strFileName.Substring(strFileName.LastIndexOf("\\") + 1);
try
{
FileUpload1.SaveAs(FilePath + "\\" + this.FileUpload1.FileName);
//save the file and obey the rules
Label1.Text = "Upload success!";
}
catch (Exception e)
{
Label1.Text = "Upload Failed!"+e.Message.ToString();
}
}
}
protected void ImageButton_Up_Click(object sender, ImageClickEventArgs e)
{
UpFile();
}
protected void ImageButton_Down_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("DownFile.aspx");
}
}
アップロードを終えて、ファイルのダウンロードについてお話しします.ここでは主にDirectoryオブジェクトのGetFiles()メソッドを使用して、指定したパスの下にあるすべてのファイルの名前を取得できます.これによりlistBoxを入力して、そのファイルをダウンロードするかどうかを選択することができます.この时、あなたは少し疑問に思っているかもしれませんが、私は今どんなファイルがダウンロードできるか知っています.次のステップはどうやって実現しますか?実はここではセッションのストレージメカニズムを利用しています.それはリストボックスで選択したitemの内容をセッションの特定のkeyに記録することです.そうすれば、これらの情報がページ間でどのように伝送されているのか気にしなくてもいいです.ダウンロードしたい場所で直接取得すればいいだけです.最も重要なのはダウンロードのプロセスです.
if (filepathinfo.Exists)
{
//save the file to local
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(filepathinfo.Name));
Response.AddHeader("Content-length", filepathinfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Filter.Close();
Response.WriteFile(filepathinfo.FullName);
Response.End();
}
次に、インタフェースのレイアウトファイルをダウンロードしましょう.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DownFile.aspx.cs" Inherits="DownFile" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ImageButton ID="ImageButton_Up" runat="server" Height="56px" OnClick="ImageButton_Up_Click" ToolTip="Upload" Width="90px" />
<asp:ImageButton ID="ImageButton_Down" runat="server" Height="52px" OnClick="ImageButton_Down_Click" style="margin-top: 0px" ToolTip="Download" Width="107px" />
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:ListBox ID="ListBox1" runat="server" Height="169px" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" Width="371px"></asp:ListBox>
</div>
</form>
</body>
</html>
そして具体的な論理コード実装
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
public partial class DownFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)//the first time to load
{
//get all the file in File folder
String[] AllTxt = Directory.GetFiles(Server.MapPath("File"));
foreach (String name in AllTxt)
{
ListBox1.Items.Add(Path.GetFileName(name));
}
}
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//make use of sssion to save the selected file in the listbox with the key of "select"
Session["select"] = ListBox1.SelectedValue.ToString();
}
protected void ImageButton_Down_Click(object sender, ImageClickEventArgs e)
{
//judge weather user choose at least one file
if (ListBox1.SelectedValue != "")
{
//get the path of the choosed file
String FilePath = Server.MapPath("File/") + Session["select"].ToString();
//initial the object of Class FileInfo and make it as the package path
FileInfo filepathinfo = new FileInfo(FilePath);
//judge weather the file exists
if (filepathinfo.Exists)
{
//save the file to local
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(filepathinfo.Name));
Response.AddHeader("Content-length", filepathinfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Filter.Close();
Response.WriteFile(filepathinfo.FullName);
Response.End();
}
else
{
Page.RegisterStartupScript("sb", "<script>alert('Please choose one file,sir!')</script>");
}
}
}
protected void ImageButton_Up_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("Default.aspx");
}
}
注意:最終的にアップロードされたファイルはルートディレクトリの下のFileフォルダの下に表示され、ダウンロード時にもこのフォルダの下からダウンロードされます.
まとめ:この小さなプロジェクトの実践を経て、私はsessionがプログラミングにもたらした便利さを見て、FileUploadコントロールの威力も体得しました;しかし、これはすべてではなく、ここは氷山の一角にすぎない.広範な博友と一緒に進歩して一緒に向上することを望んでいます!