Avatar billede hald. Nybegynder
17. maj 2004 - 12:59 Der er 21 kommentarer og
1 løsning

upload billede til server

Der skulle vel ikke være en enkelt eller to, der ved hvordan fanden (undskyld sproget) man kan uploade en billede-fil (jpg, gif) til en mappe på en server.

Jeg er igang med at lave 2 metoder (til et administrations modul), der henholdsvis uploader et billede til serveren, og en anden der så rent visuelt kan vise brugeren hvilke billeder der er til rådighed.

Ud fra det kan brugeren så vælge et billede (i form af et id/navn på filen).

...er det helt sort ???
Avatar billede arne_v Ekspert
17. maj 2004 - 13:06 #1
Ikke sort men måske ikke så præcist.

Snakker vi:

browser----IIS--ASP.NET side i C#

C# client app----IIS--ASP.NET side i C#

C# client app----IIS--ASP / C# client app----Apache--PHP

C# client app----C# server app

eller noget helt  femte ?
Avatar billede hald. Nybegynder
17. maj 2004 - 13:29 #2
tjaaa... tjooo....

Vi snakker en C# app -> en Apache, PHP, MySQL

Dvs. at jeg laver en en C# applikation i Forms, som jeg så gerne vil have til at kunne uploade til en Apache-server.
Avatar billede arne_v Ekspert
17. maj 2004 - 13:48 #3
Jeg har tilfældigvis et stykke C# kode liggende som uploader 2 filer
(1 tekst fil + 1 binær fil) til et PHP script:

using System;
using System.IO;
using System.Net;

public class FileUpload
{
    private const string BOUNDARY = "ArneArne";
    public static void Main(string[] args)
    {
        //upload("http://localhost/upload2.php", "C:\\z.c", "C:\\z.exe");
        upload("http://localhost/upload.php", "C:\\z.c", "C:\\z.exe");
    }
    public static void upload(string url, string textfile, string binfile)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        req.ContentType = "multipart/form-data, boundary=" + BOUNDARY;
        StreamWriter post = new StreamWriter(req.GetRequestStream());
        post.WriteLine("--" + BOUNDARY);
        //post.WriteLine("Content-disposition: attachment; name=\"filename[1]\"; filename=\"" + textfile + "\"");
        post.WriteLine("Content-disposition: attachment; name=\"textfile\"; filename=\"" + textfile + "\"");
        post.WriteLine("Content-type: text/plain");
        post.WriteLine("");
        StreamReader txtf = new StreamReader(new FileStream(textfile, FileMode.Open));
        string line;
        while((line = txtf.ReadLine()) != null)
        {
            post.WriteLine(line);
        }
        txtf.Close();
        post.WriteLine("--" + BOUNDARY);
        //post.WriteLine("Content-disposition: attachment; name=\"filename[2]\"; filename=\"" + binfile + "\"");
        post.WriteLine("Content-disposition: attachment; name=\"binfile\"; filename=\"" + binfile + "\"");
        post.WriteLine("Content-type: application/octet-stream");
        post.WriteLine("Content-Transfer-Encoding: binary");
        post.WriteLine("");
        post.Flush();
        Stream binf = new FileStream(binfile, FileMode.Open);
        int c;
        while((c = binf.ReadByte()) >= 0) {
            post.BaseStream.WriteByte((byte)c);
        }
        binf.Close();
        post.BaseStream.Flush();
        post.Close();
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Console.WriteLine(resp.StatusCode);
        resp.Close();
    }
}
Avatar billede arne_v Ekspert
17. maj 2004 - 13:48 #4
Det må du kunne bruge som udgangs punkt for noget fornuftigt.
Avatar billede hald. Nybegynder
17. maj 2004 - 13:50 #5
(lige for at få det banket helt på plads ;o) )

Min C#-klient skal kunne connecte til en server (evt. ftp), og uploade en billedefil der ligger lokalt på klienten.

Når filen så er uploadet, og ligger på serveren, skal det så være muligt for klienten at få vist en liste over de billeder der ligger i biblioteket, og så i sidste ende vælge det pågældende billede.
Avatar billede hald. Nybegynder
17. maj 2004 - 13:50 #6
fik ikke lige set dit indlæg inden jeg postede,.... prøver lige at kigge på det.
Avatar billede hald. Nybegynder
17. maj 2004 - 14:00 #7
Jeg kan se at du her oploader filerne, så de skal "behandles" af et evt. php-script.

Men jeg skal arbejde direkte på serveren - uden nogen web-del. Jeg vil altså udelukkende bruge serveren til at lagre billederne...
Avatar billede arne_v Ekspert
17. maj 2004 - 14:09 #8
Det pågældende PHP script gemmer dem bare i et directory.

Der er jo ikke noget der hedder direkte på serveren. Det skal uploades med en
protokol.

Min kode bruger HTTP til et upload server script.

Man kunne også bruge FTP til en FTP server. Men koden er mere kompleks for det.
Avatar billede hald. Nybegynder
17. maj 2004 - 14:36 #9
det var nu også det jeg mente... men jeg vil meget gerne helt uden om at skulle blande eventuelle scripts ind i det ;o)
Men ved ud så hvordan jeg får listet alle billederne om (hvis vi går ud fra at jeg nu har uploadet billedet til serveren)...

det må jeg jo lige se om jeg kan få bisket sammen.
Avatar billede arne_v Ekspert
17. maj 2004 - 14:53 #10
Alle web servere jeg kender kan liste filer i et directory og din applikation kan
nemt requeste den oplsyning fra serveren.
Avatar billede hald. Nybegynder
18. maj 2004 - 11:02 #11
Hej Arne (og hvem der nu måtte være tændt på det her spørgsmål)...

Jeg har som sagt ikke noget script der skal "stå for" behandlingen af mine uploadede billede-filer, og jeg har ikke lige kunne se hvordan jeg skal lave det.

17/05-2004 14:53:50 >> Hvordan gør jeg det,...det er sådan set lidt det jeg spørger om. Ideen er jo, at jeg visuelt skal liste de billeder (i form af thumbs) der ligger mit upload-bibliotek på serveren - og det skal altsammen foregå INDEN I min C# applikation...

Dvs...

1) Hvordan uploader jeg en billedefil til serveren. (har oprettet en mappe med chmod 777)

2) Hvordan kan jeg liste de pågældende filer, der ligger i dette bibliotek - I min (rene) C# Applikation ? Brugeren skal altså ud over filnavnet, have mulighed for at se de forskellige billder (gerne i form af thumbs).

...du må undskylde, hvis du føler at du allerede har svaret - men jeg kan simpelthen ikke lige greje den.
Avatar billede hald. Nybegynder
18. maj 2004 - 11:10 #12
Har prøvet at uploade en alm. txt-fil:

public void uploadFile(string server, string filepath)
{
  try
  {
    WebClient client = new WebClient();
    client.UploadFile(server, filepath);
    System.Windows.Forms.MessageBox.Show("File successfully uploaded..");
  }
  catch(System.SystemException)       
  {
    System.Windows.Forms.MessageBox.Show("Application failed to upload file !");
  }
}

...men her får jeg en SystemException !!!
Avatar billede arne_v Ekspert
18. maj 2004 - 11:10 #13
Man uploader ikke bare til en server.

man uploader til en HTTP server (Apache/IIS)

man uploader til en FTP server

man uploader til en socket/remoting server

Brug af HTTP server kræver normalt et upload script (den slags fåes i
bundter fra nettet).

Du må fortælle os hvad du vil uploade til.

Og hvad der skal levere oplsyningerne om hvilke filer der ligger i upload dir.
Avatar billede arne_v Ekspert
18. maj 2004 - 11:13 #14
WebClient uploadFile gør sådan ca. det samme som mit kode eksempel.

Og der skal også være et upload script.

De venlige folk hos Microsoft har dog puttet et eksempel på upload script
i dokuemntationen for WebClient uploadFile !
Avatar billede hald. Nybegynder
18. maj 2004 - 11:19 #15
...ok

Den applikation jeg skal lave, skal fungere som et administrationsmodul til et website, der ligger på en server med apache, php og mysql (B-one).

MEN,..jeg vil gerne helt uden om PHP-scriptet hvis det kan lades sig gøre...
Avatar billede arne_v Ekspert
18. maj 2004 - 11:31 #16
Medmindre Apache har et PUT modul, så skal du bruge et script til at
lave POST til.

Microsofts ASP.NET script duer nok ikke til Apache+PHP.

Men der må være hundredevis af upload scripts.

Jeg har også et liggende derhjemem som jeg brugte til test af
før nævnte program.
Avatar billede hald. Nybegynder
18. maj 2004 - 12:06 #17
Det må da kunne lade sig gøre...

I hvert fald hvis vi laver det helt fra scratch ??? Altså efter som det er muligt at lave mindre ftp-programmer i C#... det har jeg da set.

Men ok,....dvs. at jeg smækker en PHP-fil op på serveren, der behandler mine posts.
Kunne det se lidt ud ala:

--- klip (taget fra webcafe) -------

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Accepterer vi filens stoerrelse? */
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
  die("Desværre - filen er for stor. Jeg accepterer kun " .
      $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
      ceil($fil_stoerrelse, 1) . " kb");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
  move_uploaded_file($fra, $til);
} else {
  copy($fra, $til);
}

------------- Klip --------------------


Jeg kunne vel ikke få dig til at kommentere dit script lidt (når du engang får tid), og evt. forklare mig hvad du bruger din "binfile" til.

Men så igen,...hvordan fanden bærer man sig ad med at liste/vise indholdet af upload-mappen i min C# app....

skal nok forhøje point,...det er jo åbenbart ikke så let som jeg håbede på :o(

Men du skal i hvert fald have mange tak for din hjælp indtil nu...
Avatar billede burningice Nybegynder
31. maj 2004 - 22:53 #18
der findes altså flere eksempler på FTP i C#... hvorfor bruger du ikke det, og uploader dine filer via ftp istedet for http?
Avatar billede arne_v Ekspert
07. juni 2004 - 23:37 #19
Kode eksemplet uploadet 1 text file + 1 binary file i et hug.

Du kan bare fjerne den ene.

Og så behøver du heller ikke at bruge multipart.

Det er ikke så svært.
Avatar billede arne_v Ekspert
07. juni 2004 - 23:38 #20
At vise indholdet af mappen er ikke svært det kan Apache gøre out of the box.
Avatar billede arne_v Ekspert
16. juni 2004 - 23:16 #21
OK ?
Avatar billede hald. Nybegynder
29. juli 2004 - 10:59 #22
sorry Arne ! Kom lidt væk fra det igen

...men løste det på den nemme måde (desværre),...ved at ligge et script på serveren, der så står for opload af billedet.
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