ASP.NET Загрузка файла - PullRequest
       11

ASP.NET Загрузка файла

6 голосов
/ 02 июля 2010

Я пытаюсь создать серверную страницу (C #, asp.net 2.0+) для сохранения загруженного файла с другой страницы.

В частности, у меня есть HTML-страница с

<form action="upload.aspx"> 

, и я не могу понять, как обработать сохранение файла на сервере в upload.aspx.

Я нашел несколько примеров (один из них: http://msdn.microsoft.com/en-us/library/aa479405.aspx), но для этого требуется, чтобы элемент <input type=file> находился на той же странице.

У меня возникают проблемы с получением опубликованного файла при загрузке.Страница aspx.

У кого-нибудь есть указатели? Как я могу получить опубликованный файл в aspx и сохранить его на сервере, когда файл публикуется с другой страницы?

Большое спасибо, Бретт

Ответы [ 5 ]

11 голосов
/ 03 июля 2010

1.Создать Uploadfile.aspx

2. Вставьте файл Uploadfile.aspx на свою HTML-страницу, используя iframe

    <%@ 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>

теперь вы можете загрузить свой файл из самого html, используя UploadFiles.aspx.

1 голос
/ 02 июля 2010

Вы не можете сделать это без <input type=file">

<form action="upload.aspx">, который не отправляет файл и сообщает серверу, куда отправить запрос.

1 голос
/ 02 июля 2010

Используйте код, подобный этому, и затем запишите его на диск (используя, скажем, 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

0 голосов
/ 08 июня 2019

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;
        }
    }
}
0 голосов
/ 02 июля 2010

Я сделал небольшой тестовый пример:

  1. Разметка 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>
    
  2. Код от Upload.aspx:

    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. Там вы можете использовать свойство PreviousPage класса Page, чтобы найти элемент управления с предыдущей страницы, привести его к FileUpload и получить из него то, что вам нужно.

...