Avatar billede pablopablo Nybegynder
30. juli 2006 - 23:08 Der er 26 kommentarer og
1 løsning

Upload af filer

Hey... jeg har to spgs...

1. Jeg sidder og bruger Visual Studio's upload file kontrol...
Men den kan ikke finde den fil jeg prøver at uploade? den skriver:

Could not find a part of the path 'c:\windows\system32\inetsrv\Photos\hp0.gif'.

Stien til mappen på serveren er roden\Photos\

Koden ser således ud:

String savePath = "Photos/";

Har i en ide til, hvorfor den skriver den underlige streng?

2. Kender I en gratis upload control, som er i stand til at uploade flere filer på én gang?

Mvh. PabloPablo
Avatar billede snepnet Nybegynder
30. juli 2006 - 23:37 #1
c:\windows\system32\inetsrv\ er det bibliotek du så tilsyneladende arbejder i under eksekveringen.
Hvis du vil lægge filen i en folder under dit site kan du lave en
String savePath = Server.MapPath("Photos");
Mvh
Avatar billede snepnet Nybegynder
30. juli 2006 - 23:42 #2
Har ikke umiddelbart et link til en gratisk multifile upload kontrol, men det kan sikkert googles op rimelig hurtigt vil jeg tro.
Men altså ... Du kan bare sætte flere fileupload's ind på din side, og få fat i filerne med
Request.Files
Mvh
Avatar billede pablopablo Nybegynder
30. juli 2006 - 23:49 #3
har prøvet google...men umiddelbart uden held...den med flere controls på siden er jeg ikke meget for...
Avatar billede pablopablo Nybegynder
31. juli 2006 - 00:03 #4
Hey igen...min upload funktion virker nu...med din kode :)

Jeg fandt dette: http://the-stickman.com/web-development/javascript/upload-multiple-files-with-a-single-file-element/

Dette er dog ikke 100% optimalt...idet at  man skal trykke på Browse knapper mange gange, hvis man skal uploade mange filer...? Er det fordi, det ikke er muligt, at have en FileDialog som benytter MultiSelect i asp.net...eller? nej vel...?
Avatar billede snepnet Nybegynder
31. juli 2006 - 08:34 #5
Hej :o)

På den du linker til skal man ikke trykke browse flere gange... Du holde bare ctrl nede og vælger filer i dialogboksen.

Mvh
Avatar billede pablopablo Nybegynder
31. juli 2006 - 14:36 #6
Hej igen...øøh!...hvordan gør du det?...hos mig kan man altså KUN vælge én fil af gangen uanset om man holder CTRL nede eller ej!?? Det er også okay, hvis det ikke kan være anderledes...men kan ikke det helt til at spille...dvs...det med at browse, vælge en fil og det at den efterfølgende skrive stien på filen og viser slet knappen virker(altså som på linket) fint nok...men selve upload-funktionen, som jeg selv har prøvet at kode og tilknytte...virker ikke rigtig...

I linket er en som har skrevet:

Here is vb.net back end implementation after the page is submitted. Someone was asking for it.

‘get the form file collection
Dim myfiles As System.Web.HttpFileCollection = System.Web.HttpContext.Current.Request.Files
Dim iFile As Integer

For iFile = 0 To myfiles.Count - 1
‘ get the posted file
Dim postedFile As System.Web.HttpPostedFile = myfiles(iFile)

‘make sure it is not blank
If Not postedFile.FileName.Equals(”") Then
‘Save File to the proper directory
postedFile.SaveAs(Request.MapPath(”folder/”) + System.IO.Path.GetFileName(postedFile.FileName)
End If

Next iFile

Idet jeg foretrækker C# har jeg omskrevet dette til:

//‘get the form file collection
        HttpFileCollection myfiles = System.Web.HttpContext.Current.Request.Files;

        for(int iFile = 0; iFile < myfiles.Count; iFile++)
        {
            HttpPostedFile postedFile = myfiles[iFile];
           
            if(postedFile.FileName != "")
                postedFile.SaveAs(Request.MapPath("Photos\\" + System.IO.Path.GetFileName(postedFile.FileName)));
        } 

Ny er jeg jo en lille newbie...og ved faktisk ikke helt hvor jeg skal indsætte dette kode...har prøvet at lægge det ind under en ny knap...men det virkede ikke rigtig...og det er ikke som om at java-scriptet ikke fungerer, hvis jeg prøver at lægge det ind i den eksisterende "submit" knap...

Min Upload.aspx fil ser lige nu sålades ud:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Upload.aspx.cs" Inherits="Default2" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<!-- This is the form -->
<form enctype="multipart/form-data" action="multifile.js" method = "post">
    <!-- The file element -- NOTE: it has an ID -->
    <input id="my_file_element" type="file" name="file_1" >
    <input type="submit">
</form>
Files:
<!-- This is where the output will appear -->
<div id="files_list"></div>

<script>
    <!-- Create an instance of the multiSelector class, pass it the output target and the max number of files -->
    var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 3 );
    <!-- Pass in the file element -->
    multi_selector.addElement( document.getElementById( 'my_file_element' ) );
</script>

</asp:Content>

Kan du fortælle mig, hvordan jeg får integreret min C# kode, således at selve uploade funktionen også kommer til at virke?
Avatar billede snepnet Nybegynder
31. juli 2006 - 14:44 #7
Du kan da fuldstændig ret ... Ved ikke hvad jeg havde fået galt i halsen der :oD
Hvad er det der ikke virker, hvis du lægger koden i en knaps klik-eventhandler?
Mvh
Avatar billede pablopablo Nybegynder
31. juli 2006 - 15:00 #8
hehe, ok tak ;)

Øhhm...ja altså..tror det er letteste at du bare forklare mig hvordan DU ville få det til at virke...i stedet for, at jeg bruger tid på at fortælle hvordan jeg ikke kan få det til at virke...hehe...jeg gør jo sikkert noget helt galt...så please teach me master...;)
Avatar billede snepnet Nybegynder
31. juli 2006 - 15:03 #9
Jeg ville bare sætte en knap ind hvor der står upload, og så ville jeg i handleren af klikeventet på knappen trække filerne ud med Request.Files - men det er jo for så vidt også det du har gjort.
Det var derfor jeg gerne ville høre hvad balladen var omkring det ;o)
Mvh
Avatar billede pablopablo Nybegynder
31. juli 2006 - 15:15 #10
hhm...ja, okay...jeg forstår...jeg prøver lige at kigge på det igen så...men er nok bare lidt i tvivl om det der i SCRIPT TAGET...jeg kan jo ikk udføre C# koden samme sted vel eller? hvordan hænger det sammen? HVIS jeg selv laver en knap...så er det jo to knapper på formen...og det er jo heller ik meningen...??
Men da jeg afprøvede det igår, så skete der bare ikke noget kan jeg lagde C# koden ind under en ny knap...?? :/
Avatar billede pablopablo Nybegynder
31. juli 2006 - 15:51 #11
hey igen...nu er der to knapper siden...du kan af prøve det her
http://www.cdekoration.dk/Upload.aspx

Jeg får følgende fejl, når jeg trykke på upload knappen:
(Jeg HAR sat error halløj i web.config til OFF)

Server Error in '/' Application.
--------------------------------------------------------------------------------

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Lige nu, gør Submit knappen vel egenlig ik noget...for ejg har ik lavet nogen event på den...det der SCRIPT TAG det bliver jo bare altid udført når siden loades ikke sandt...eller?
Avatar billede pablopablo Nybegynder
31. juli 2006 - 16:15 #12
Hey igen...har søgt på fejlen...og har bla. fundet dette

http://forums.asp.net/1099212/ShowPost.aspx

De kommer dog kun frem til dette...og det virker ikke som den bedste løsning...?
<pages enableEventValidation="false" />

Men hvad er det jeg gør, siden at jeg lige pludselig skal til at slå alt muligt fra..??
Avatar billede pablopablo Nybegynder
31. juli 2006 - 16:21 #13
Har lige tilføjet linie til web.config'en og nu er fejlen forsvundet...men der ser til gengæld heller ikke noget andet når jeg trykker på knappen...tror ikke at den kommer ind i løkken pga. den ikk kan finde nogle til til upload...??
Avatar billede snepnet Nybegynder
31. juli 2006 - 18:10 #14
prøv at vise mig hele din kode.
(både det du har i aspx-filen, og det du har i cs-filen)
Mvh
Avatar billede pablopablo Nybegynder
31. juli 2006 - 18:59 #15
.ASPX
-------
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Upload.aspx.cs" Inherits="Default2" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<!-- This is the form -->
<form enctype="multipart/form-data" action="multifile.js" method = "post">
    <!-- The file element -- NOTE: it has an ID -->
    <input id="my_file_element" type="file" name="file_1" >
    <input type="submit" value="Submit Query">
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Upload" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></form>
Files:
<!-- This is where the output will appear -->
<div id="files_list"></div>

<script>
    <!-- Create an instance of the multiSelector class, pass it the output target and the max number of files -->
    var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 3 );
    <!-- Pass in the file element -->
    multi_selector.addElement( document.getElementById( 'my_file_element' ) );
</script>

</asp:Content>


.CS
------


using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

    }
protected void Button1_Click(object sender, EventArgs e)
    {
        //‘get the form file collection
        HttpFileCollection myfiles = System.Web.HttpContext.Current.Request.Files;

        for(int iFile = 0; iFile < myfiles.Count; iFile++)
        {
            Label1.Text = myfiles.Count.ToString();
            HttpPostedFile postedFile = myfiles[iFile];
           
            if(postedFile.FileName != "")
                postedFile.SaveAs(Request.MapPath("Photos\\" + System.IO.Path.GetFileName(postedFile.FileName)));
        } 
    }
}
Avatar billede snepnet Nybegynder
31. juli 2006 - 19:28 #16
Har lige prøvet den - sådan lige umiddelbart synes jeg du er bedre stillet med sådan noget som det her:

<form id="form1" runat="server">
    <asp:FileUpload ID="FileUpload1" runat="server" /><br />
    <asp:FileUpload ID="FileUpload2" runat="server" /><br />
    <asp:FileUpload ID="FileUpload3" runat="server" /><br />
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>

protected void Button1_Click(object sender, EventArgs e)
{
    HttpFileCollection files = Request.Files;
    foreach (HttpPostedFile files in files)
    {
        // ...
    }
}

Ellers må du google videre og finde en laber (og gratis) multifiloploadkontrol.... Ellers er der måske andre herinde der kender en.

Mvh
Avatar billede pablopablo Nybegynder
31. juli 2006 - 21:01 #17
hey...hmm...?? jeg er skam tilfreds nok med den! (Har virkelig søgt meget via google) men det må da være muligt at lige lave det sidste og få det til at virke??
Kan du ikke fortælle mig hvad jeg gør galt?
Avatar billede snepnet Nybegynder
31. juli 2006 - 21:15 #18
Jeg kender ikke komponenten - har blot lige kastet et blik på den.
Kan blot konstatere at de filer du peger på ikke ligger i Request.Files, hvilket stiller dig skidt på serversiden.
Der er mange kommentarer på den side du henviste til, så jeg vil tro at svaret findes der et sted.
Jeg synes ikke du gør noget galt.... I et asp.net miljø vil det være forventeligt at du enten har dine filer på en serverside komponent, eller i Request.Files, og ingen af delene synes at være tilfældet med den du henviste til (som udgangspunkt).
Mvh
Avatar billede pablopablo Nybegynder
31. juli 2006 - 21:23 #19
hhmmm...

har lige ændret linien:

<form enctype="multipart/form-data" action="multifile.js" method = "post">

til

<form enctype="multipart/form-data">

idet den alligevel ikke blev brugt til noget...

Altså komponenten virker jo fint nok...det er jo bare de få linier jeg selv har kodet som også skal virke, andet er det jo ikke...det må da være muligt...Jeg er meget lidt inde i alt det her, derfor håber jeg sådan at du kan hjælpe mig med at få den kode til at virke...
Avatar billede pablopablo Nybegynder
31. juli 2006 - 21:31 #20
PS. Når jeg kører det lokalt og debugger kan jeg se, at "myfiles.Count" = 0...dvs. den kommer ikke ind i for-løkken...hvordan kan det mon være...?
Avatar billede pablopablo Nybegynder
01. august 2006 - 01:37 #21
Sorry...havde ikke rigtgi forstået dit seneste indlæg...men læg du bare et svar...du har været tålmodig og hjælpsom...og jeg har fundet noget kode som jeg har fået til at virke!! so now i'm a happy man again ;)

Havde kigget på det tidligere, men denne gang brugte jeg lidt mere tid på det...det skulle jeg vist have gjort fra starten af, har brugt alt for meget tid på det andet...men sådan er al start jo....tidskrævende!

Jeg fandt det på codeprojekt...http://www.codeproject.com/aspnet/multiuploads.asp

Hvis du lige som jeg godt kan lide, at få det hele serveret på et sølvfad og bruger asp.net 2.0 og masterpages så gøres det sådan her...

.ASPX
------

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Upload2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <input id="FindFile" runat="server" class="bluebutton" size="26" style="z-index: 101;
        left: 692px; width: 274px; top: 489px; height: 22px" type="file" /><br />
    &nbsp;
    <asp:ListBox ID="ListBox1" runat="server" CssClass="txtbox" Font-Size="XX-Small"
        Height="100px" Style="z-index: 102; left: 370px; top: 524px" Width="274px"></asp:ListBox>
    <br />
    <asp:Button ID="AddFile" runat="server" CssClass="bluebutton" Height="23px" Style="z-index: 103;
        left: 361px; top: 611px" Text="Add" Width="72px" OnClick="AddFile_Click" />
    <asp:Button ID="RemvFile" runat="server" CssClass="bluebutton" Height="23px" Style="z-index: 104;
        left: 439px; top: 603px" Text="Remove" Width="72px" OnClick="RemvFile_Click" />
    <input id="Upload" runat="server" class="bluebutton" onserverclick="Upload_ServerClick"
        style="z-index: 105; left: 500px; width: 71px; top: 585px; height: 24px" type="submit"
        value="Upload" />
    <br />
    <asp:Label ID="Label1" runat="server" Height="25px" Style="z-index: 106; left: 363px;
        top: 623px" Width="249px"></asp:Label>
</asp:Content>


.CS
-----

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
    public ArrayList files = new ArrayList();
    static public ArrayList hif = new ArrayList();
    public int filesUploaded = 0;

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Upload_ServerClick(object sender, EventArgs e)
    {
        string status = "";

        if ((ListBox1.Items.Count == 0) && (filesUploaded == 0))
        {
            Label1.Text = "Error - a file name must be specified.";
            return;

        }
        else
        {
            string fn = "";

            foreach (System.Web.UI.HtmlControls.HtmlInputFile HIF in hif)
            {
                try
                {
                    fn = System.IO.Path.GetFileName(HIF.PostedFile.FileName);
                    HIF.PostedFile.SaveAs(Server.MapPath("Photos\\" + fn));
                    filesUploaded++;
                    status += fn + "<br>";
                }
                catch (Exception err)
                {
                    Label1.Text = "Error saving file " + fn + "<br>" + err.ToString();
                }
            }

            if (filesUploaded == hif.Count)
            {
                Label1.Text = "These " + filesUploaded + " file(s) were uploaded:<br>" + status;
            }
            hif.Clear();
            ListBox1.Items.Clear();
        }
    }
    protected void RemvFile_Click(object sender, EventArgs e)
    {
        if (ListBox1.Items.Count != 0)
        {

            hif.RemoveAt(ListBox1.SelectedIndex);
            ListBox1.Items.Remove(ListBox1.SelectedItem.Text);
        }
    }
    protected void AddFile_Click(object sender, EventArgs e)
    {
        if (Page.IsPostBack == true)
        {
            hif.Add(FindFile);
            ListBox1.Items.Add(FindFile.PostedFile.FileName);

        }
        else
        {

        }
    }
}

Håber at I andre en dag kan få lide glæde af dette :) hehe...

Jeg vender sikkert snart tilbage igen, har jo svært ved at holde mig væk...;)

Mvh. PabloPablo

PS. uden at have afprøvet det, tror jeg at indholdet fra metoden Upload_ServerClick og vil kunne bruges i det første tilfælde som jeg startede med...hvis man bedre kan lide den løsning.......?
Avatar billede pablopablo Nybegynder
01. august 2006 - 02:14 #22
Ovenstående virker fint...men den kommer sgu med en fejl hvis jeg vælger nogle filer som er på blot 200kb...??

Error saving file test.jpg
System.ObjectDisposedException: Cannot access a closed file. at System.IO.__Error.FileNotOpen() at System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin) at System.Web.HttpRawUploadedContent.TempFile.GetBytes(Int32 offset, Int32 length, Byte[] buffer, Int32 bufferOffset) at System.Web.HttpRawUploadedContent.WriteBytes(Int32 offset, Int32 length, Stream stream) at System.Web.HttpInputStream.WriteTo(Stream s) at System.Web.HttpPostedFile.SaveAs(String filename) at Default2.Upload_ServerClick(Object sender, EventArgs e)
Avatar billede pablopablo Nybegynder
01. august 2006 - 02:21 #23
hihi...så er den fikset...indsæt dette i web.config i </system.web> delen...det virker! ;)

    <httpRuntime
        requestLengthDiskThreshold="8192"               
    />

The RequestLengthDiskThreshold property specifies the input-stream buffering threshold limit in number of bytes. Its value should not exceed the MaxRequestLength property value. After a request entity exceeds this threshold, it is buffered transparently onto disk.
Avatar billede snepnet Nybegynder
01. august 2006 - 10:46 #24
Meget fint at du er kommet videre med det :o)
Beklager jeg ikke har været tilstede.
Mvh
Avatar billede pablopablo Nybegynder
01. august 2006 - 10:48 #25
ja ik ;)

Bare læg et svar!
Avatar billede snepnet Nybegynder
01. august 2006 - 10:50 #26
Kommer her :o) - men jeg synes vi skal dele.
Mvh
Avatar billede pablopablo Nybegynder
01. august 2006 - 12:07 #27
Hehe, det er okay - er altid glad for at få hjælp som er mulig!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester