[英]ASP.NET File Upload
我正在嘗試制作一個服務器頁面(C#,asp.net 2.0+)來保存從另一個頁面上傳的文件。
具體來說,我有一個 HTML 頁面
<form action="upload.aspx">
而且我不知道如何處理在upload.aspx 中保存服務器上的文件。
我找到了一些示例(一個是: http://msdn.microsoft.com/en-us/library/aa479405.aspx ),但這需要<input type=file>
元素位於同一頁面上。
我無法在我的 upload.aspx 頁面上抓取已發布的文件。
有人有任何指示嗎? 當文件從另一個頁面發布時,如何在 aspx 中獲取發布的文件並將其保存到服務器?
非常感謝,布雷特
1.創建Uploadfile.aspx
2.使用iframe在您的Html頁面中嵌入Uploadfile.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Uploadfile.aspx.cs" Inherits="Uploadfile" %>
<!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>File Upload Control</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload runat="server" ID="fuSample" />
<asp:Button runat="server" ID="btnUpload" Text="Upload"
onclick="btnUpload_Click" />
<asp:Label runat="server" ID="lblMessage" Text=""></asp:Label>
</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;
public partial class Uploadfile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnUpload_Click(object sender, EventArgs e)
{
//Files is folder Name
fuSample.SaveAs(Server.MapPath("Files") + "//" + fuSample.FileName);
lblMessage.Text = "File Successfully Uploaded";
}
}
然后將您的aspx頁面嵌入Html中,如下所示,
<iframe height="40" width="700" src="Uploadfile.aspx">
</iframe>
現在,您可以使用UploadFiles.aspx從html本身上傳文件。
使用與此類似的代碼然后將其寫入磁盤(使用,例如,FileStream)
HttpFileCollection MyFileCollection;
HttpPostedFile MyFile;
int FileLen;
System.IO.Stream MyStream;
MyFileCollection = Request.Files;
MyFile = MyFileCollection[0];
FileLen = MyFile.ContentLength;
byte[] input = new byte[FileLen];
// Initialize the stream.
MyStream = MyFile.InputStream;
// Read the file into the byte array.
MyStream.Read(input, 0, FileLen);
http://msdn.microsoft.com/en-us/library/system.web.httppostedfile.inputstream%28VS.71%29.aspx
沒有<input type=file">
你不能這樣做
<form action="upload.aspx">
不發送文件告訴服務器將請求發送到哪里。
我做了一個小測試案例:
Uploader.aspx標記:
<form id="form1" runat="server"> <div> <asp:FileUpload runat="server" ID="fuTest" /><br /> <asp:Button runat="server" ID="btnUpload" Text="Upload" PostBackUrl="~/Uploading/Upload.aspx" /> </div> </form>
來自Upload.aspx的Codebehind:
protected void Page_Load(object sender, EventArgs e) { FileUpload fu = PreviousPage.FindControl("fuTest") as FileUpload; if (fu != null) { int length = fu.PostedFile.ContentLength; } }
按鈕的PostBackUrl屬性將其發布到Upload.aspx頁面。 在那里,您可以使用Page類的PreviousPage屬性從上一頁中查找控件,將其強制轉換為FileUpload,並從中檢索您想要的內容。
namespace A8 { public partial class WebForm1 : System.Web.UI.Page { class Proizvod { public string ceo_red, ime, proizvodjac, ram, tip, kamera,slika, ekran,sifra, cena; public Proizvod(string x) { ceo_red = x; slika = x.Split(',')[0]; sifra = x.Split(',')[1]; ime = x.Split(',')[2]; proizvodjac = x.Split(',')[3]; ram = x.Split(',')[4]; tip = x.Split(',')[5]; kamera = x.Split(',')[6]; ekran = x.Split(',')[7]; cena = x.Split(',')[8]; } } List<Proizvod> proizvodi = new List<Proizvod>(); protected void Page_Load(object sender, EventArgs e) { StreamReader sr = new StreamReader(@"F:\\dji\\A8\\A8\\TextFile1.txt"); for (int i = 0; i < 5; i++) { proizvodi.Add(new Proizvod(sr.ReadLine())); } for (int i = 0; i < proizvodi.Count; i++) { bool isti = false; for (int j = 0; j < DropDownList1.Items.Count; j++) { if (proizvodi[i].proizvodjac == DropDownList1.Items[j].Text) isti = true; } if (!isti) DropDownList1.Items.Add(proizvodi[i].proizvodjac); isti = false; for (int j = 0; j < DropDownList2.Items.Count; j++) { if (proizvodi[i].ram == DropDownList2.Items[j].Text) isti = true; } if (!isti) DropDownList2.Items.Add(proizvodi[i].ram); isti = false; for (int j = 0; j < DropDownList3.Items.Count; j++) { if (proizvodi[i].tip == DropDownList3.Items[j].Text) isti = true; } if (!isti) DropDownList3.Items.Add(proizvodi[i].tip); isti = false; for (int j = 0; j < DropDownList4.Items.Count; j++) { if (proizvodi[i].kamera == DropDownList4.Items[j].Text) isti = true; } if (!isti) DropDownList4.Items.Add(proizvodi[i].kamera); isti = false; for (int j = 0; j < DropDownList5.Items.Count; j++) { if (proizvodi[i].ekran == DropDownList5.Items[j].Text) isti = true; } if (!isti) DropDownList5.Items.Add(proizvodi[i].ekran); } Table1.Visible = false; } protected void Button1_Click(object sender, EventArgs e) { List<Proizvod> trazeni = new List<Proizvod>(); for (int i = 0; i < proizvodi.Count; i++) { if (proizvodi[i].proizvodjac == DropDownList1.Text && proizvodi[i].ram == DropDownList2.Text && proizvodi[i].tip == DropDownList3.Text && proizvodi[i].kamera == DropDownList4.Text && proizvodi[i].ekran == DropDownList5.Text) { trazeni.Add(proizvodi[i]); } } for (int i = 0; i < trazeni.Count; i++) { TableRow tr = new TableRow(); for (int j = 0; j < 9; j++) { TableCell tc = new TableCell(); tc.Text = trazeni[i].ceo_red.Split(',')[j]; tr.Cells.Add(tc); } Table1.Rows.Add(tr); } Table1.Visible = true; } } }
在您的按鈕中嘗試此方法以上傳文件:
protected void FileUpload_Click(object sender, EventArgs e)
{
if ((FileUpload.PostedFile != null) && (FileUpload.PostedFile.ContentLength > 0))
{
string fn = Path.GetFileName(FileUpload.PostedFile.FileName);
string SaveLocation = Server.MapPath("upload") + "\\" + fn;
try
{
FileUpload.PostedFile.SaveAs(SaveLocation);
FileUploadStatus.Text = "File Uploaded Successfully";
try
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string[] text = File.ReadAllLines(SaveLocation);
File.WriteAllLines(path + "/WriteLines.txt", text);
Label2.Text = "File Uploaded Succesfully";
}
catch (Exception ex)
{
FileUploadStatus.Text = "Error: " + "ex.Message";
}
}
catch (Exception ex)
{
FileUploadStatus.Text = "Error: " + ex.Message;
}
}
else
{
FileUploadStatus.Text = "Select file to upload";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.