Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как закачать файл на сервер / 6 сообщений из 6, страница 1 из 1
14.07.2003, 10:13
    #32206741
gtsroger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закачать файл на сервер
Ситуация такая - в моем ASP файле есть форма с элементом управления file. Можно ли сделать так, чтобы при выборе некоторого html-файла этим элементом управления он автоматически закачивался через ftp в определенную папку сервера.
...
Рейтинг: 0 / 0
16.07.2003, 17:27
    #32210086
vap
vap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закачать файл на сервер
рабочий пример из MSDN, в коде обработки получите stream из MyFile.PostedFile

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<%@ Page Language= "C#"  AutoEventWireup= "True"  %>
<HTML>
  <script runat= "server" >
      void UploadBtn_Click(Object sender, EventArgs e)
      {
         Response.Write(MyFile.PostedFile.FileName);
      }
  </script>
  <body>
    <form action= "fileupload.aspx"  method= "post"  enctype= "multipart/form-data"  runat= "server"  ID= "Form1" >
        <input id= "MyFile"  type= "file"  runat= "server"  NAME= "MyFile" > <input type= "submit"  value= "Upload!"  OnServerclick= "UploadBtn_Click"  runat= "server"  ID= "Submit1"  NAME= "Submit1" >
      <br>
    </form>
  </body>
</HTML>
...
Рейтинг: 0 / 0
18.07.2003, 10:17
    #32211727
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закачать файл на сервер
Информация взята с сайта prosto.pp.r
Загрузка файлов с машины клиента
Посмотрите на www.15seconds.com - хороший сборник по любым вопросам.

Для загрузки файлов на машину клиента можно рекомендовать использовать обеспечение от Software Artisans. Снабжено подробным описанием, имеются примеры. Файл можно записать в заданный каталог, в БД, можно обрабатывать BLOB-блоки (картинки).

Еще, например, www.aspsmart.com.

Posting Acceptor от компании Microsoft.Uploading Files: The Posting Acceptor, Part 1 и Uploading Files: The Posting Acceptor, Part 2
Записывает считанный файл в заданный каталог сервера. И все. Это не очень удобно.

Самоделки:

Достаточно подробно общие основы загрузки файлов с машины клиента описаны в статьях в журнале "Мир ПК" N3-4 1999г. А.В. Фролов, Г.В. Фролов "Грузите файлы на Web-сервер браузерами" и Продолжение статьи.

Еще подробная статья <% ASP на блюдечке %>. Часть 2. ActiveX-компоненты и ASP.
http://www.relib.com/articles/article.asp?id=175

Загрузку возможно осуществить и с помощью ASP кода. Однако такое решение нельзя считать приемлемым при профессиональном подходе. Кроме недостатков указанных в статье, такое решение обладает неприемлемо низкой скоростью обработки.

Еще один вариант ASP загрузки и выгрузки на RSTRUH Software.

Для любопытных приведу фрагмент текста DLL на Delphi, использованный для загрузки рисунков товаров.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
   unit WebPrice;
   
   interface
   
   uses
     Windows, Messages, SysUtils, Classes, HTTPApp, ComObj, Db, DBTables,Dialogs,
     ExtCtrls, ADODB, Psock, NMsmtp;
   
   type
     TWebModule1 = class(TWebModule)
       ADOConnection: TADOConnection;
       ADOQueryImageType: TADOQuery;
       procedure WebModule1aiInsertFileAction(Sender: TObject;
         Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
     private
       { Private declarations }
       V:        Variant;
       FCritSect: TRTLCriticalSection;
       PCntnt:   PChar;     {Указатель на буфер для Content}
       lBufCnt:  integer;  {Длина буфера для Content}
       nCntnt:   integer;  {Номер активного элемента буфера}
       lCntnt:   integer;  {Число реально загруженных символов в буфер}
       lenHTTP:  integer;  {Число не дочитанных от клиента символов}
       SeekRzd:  Boolean;  {True - разделитель найден}
       function GetFld(Rzd: string; var nf: integer): string;
     public
       { Public declarations }
     end;
   
   var
     WebModule1: TWebModule1;
   
   implementation
   
   {$R *.DFM}
   
   { -----------------------------------------------------------------}
 
   {Загрузка файла рисунка от клиента
    Параметры (метод POST):
               Path       - директория для записи файла рисунка
                            Пример - Path=C:\InePub\Wroute\Price\Images
                PriceID   - номер наименования товара (для формирования имени файла)
                FileName  - Полное имя файла на машине клиента
                Return     - Куда перейти после выполнения (опция)
                            в форме должен быть задан ENCTYPE= "multipart/form-data" }
   procedure TWebModule1.WebModule1aiInsertFileAction(Sender: TObject;
     Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
   var HTML,RzdHTTP,ErrStr,name,param,z,zType: string;
   var Path,PriceID,FileName,Return: string;
   var k,nf: integer;
   var F: file of char;
   Const CRCN=Chr( 13 )+Chr( 10 );  {\r\n}
   begin
     InitializeCriticalSection(FCritSect);
     EnterCriticalSection(FCritSect);
     try
       Path:='';  PriceID:='';  Return:='';
       nCntnt:=- 1 ;  lCntnt:=Length(Request.Content);
       PCntnt:=@Request.Content[ 1 ];  lBufCnt:=lCntnt;
       LenHTTP:=Request.ContentLength;
   ErrStr:='Чтение строки-разделителя HTTP';
       nf:= 1 ;  RzdHTTP:=GetFld(CRCN,nf);
       if NOT SeekRzd then Raise Exception.Create('Ошибка определения конца поля');
       while lCntnt> 0  do
         begin
   ErrStr:='Чтение поля name в HTTP';
           nf:= 1 ;   GetFld('name="',nf);
           if lCntnt<= 0  then break;      {достигнут конец HTTP}
           nf:= 1 ;   name:=HTTPDecode(GetFld('"',nf));
   ErrStr:='Разбор параметра name="' + name + '" в HTTP';
           nf:= 1 ;   param:=GetFld(CRCN,nf);
           name:=AnsiUpperCase(name);
           if Length(param)= 0  then       {обычный параметр}
             begin
                nf:= 1 ;   GetFld(CRCN,nf);
                nf:= 1 ;   param:=GetFld(CRCN+RzdHTTP,nf);
               if name='PATH'then Path:=HTTPDecode(param)
               else
               if name='PRICEID' then PriceID:=HTTPDecode(param)
               else
               if name='RETURN' then Return:=HTTPDecode(param)
               else
                  Raise Exception.Create('Неверное имя параметра "'+name+'"');
             end
           else                          {параметр - файл}
             begin
               if NOT (name='FILENAME') then
                  Raise Exception.Create('Неверное имя параметра "'+name+'"');
               if (Path='') OR (PriceID='')then
                  Raise Exception.Create('Неверны параметры Path и(или) PriceID');
                z:='filename="';   nf:=Pos(z,param)+Length(z);
                k:=Pos('"',Copy(param,nf,Length(param)-nf+ 1 ));
               if k< 1  then k:=Length(param)-nf+ 2 ;
                FileName:=HTTPDecode(Copy(param,nf,k- 1 ));
               if Length(Trim(FileName))= 0  then
                  Raise Exception.Create('Не задано имя файла-рисунка');
                nf:= 1 ;   GetFld('Content-Type: ',nf);
                nf:= 1 ;   param:=GetFld('/',nf);
                nf:= 1 ;   zType:=GetFld(CRCN,nf);
               if zType='pjpeg' then zType:='jpg';
               if NOT ((param='image') AND ((zType='gif') OR (zType='jpg'))) then
                  Raise Exception.Create('Загружаемый файл не рисунок GIF или JPEG');
   ErrStr:='Удаление файла с рисунками';
                name:=Path+'\f'+PriceID+'.';
               if zType='gif' then name:=name+'jpg' else name:=name+'gif';
               if FileExists(name) then
                  begin
                    AssignFile(f,name);   Reset(f);  CloseFile(f);  Erase(f);
                  end;
   ErrStr:='Запись файла с рисунком';
                name:=Path+'\f'+PriceID+'.'+zType;
                AssignFile(f,name);   Rewrite(f);
                nf:= 1 ;   GetFld(CRCN,nf);  nf:= 1 ;
               while True do
                  begin
                    param:=GetFld(CRCN+RzdHTTP,nf);
                    for k:= 1  to Length(param) do Write(f,param[k]);
                    if SeekRzd OR (lCntnt<= 0 ) then break;
                  end;
                CloseFile(f);
            end;
         end;
       if NOT (LenHTTP= 0 ) then
         Raise Exception.Create('Ошибка чтения информации с машины клиента');
   ErrStr:='Запись в базу данных расширения файла с рисунком';
       ADOConnection.Open;
       WITH ADOQueryImageType DO
         begin
           SQL.Clear;
           SQL.Add('SELECT ImageTypeID FROM ImageType '
                   +'WHERE ImageType=''' + zType + '''');
           Close;
           if NOT EOf then
             Raise Exception.Create('Не определен тип расширения изображения в БД');
           Open;
            z:=IntToStr(FieldByName('ImageTypeID').Value);
           Close;
           SQL.Clear;
           SQL.Add('UPDATE Price SET ImageTypeID=' + z
                  + ' WHERE PriceID=' + PriceID);
           Close; {Запись расширения файла с рисунком}
           ExecSQL;
           Close;
         end;
       HTML:=HTMLOk('Изображение из файла "'+FileName+'" загружено на сервер',
                     Request.Host,Return);
     except
     On E: Exception do
       begin
         while lCntnt> 0  do     {Дочитать HTTP до конца иначе клиент неадекватен}
           begin
             nf:= 1 ;   GetFld(CRCN,nf);
           end;
         HTML:=HTMLNo('Не удалось сохранить файл изображения',ErrStr,E.Message,
                       Request.Host,Return);
       end;
     end;
     ADOConnection.Close;
     LeaveCriticalSection(FCritSect);
     DeleteCriticalSection(FCritSect);
     Response.Content:=HTML;
   end;
   
   { Считывает поле из Content
     Rzd      - искомая строка-разделитель (ограничитель)
     nf       - номер текущего символа Rzd для сравнения
     Возвращает прочитанное поле длиной не более  255  байт
     nf=Length(Rzd) - разделитель найден, иначе считана только часть поля
     lCntnt<= 0  - обработан весь Content}
   function TWebModule1.GetFld(Rzd: string; var nf: integer): string;
   var n,k: integer;
   const LMAX= 1024 ;
   begin
     k:=Length(Rzd);  Result:='';  n:= 0 ;   SeekRzd:=False;
     While True do
       begin
         if lCntnt<= 0  then break;        {Все обработано}
         nCntnt:=nCntnt+ 1 ;
         if nCntnt=lCntnt then       {Считать следующую порцию}
           begin
             nCntnt:= 0 ;   LenHTTP:=LenHTTP-lCntnt;  lCntnt:=LenHTTP;
             if lCntnt>lBufCnt then lCntnt:=lBufCnt;
             if lCntnt> 0  then
                lCntnt:=Request.ReadClient(Pointer(PCntnt)^,lCntnt);
             if lCntnt<= 0  then break;    {Все обработано или отключен клиент}
           end;
         if (PCntnt+nCntnt)^=Rzd[nf] then
           if nf=k then     {Найден разделитель}
             begin
                SeekRzd:=True;   break;
             end
           else nf:=nf+ 1 
         else
           begin
             if nf> 1  then            {разделитель не подтвердился}
               begin
                  Result:=Result+Copy(Rzd, 1 ,nf- 1 );   nf:= 1 ;
               end;
              Result:=Result+(PCntnt+nCntnt)^;
           end;
         if n=LMAX then break;       {ограничение строки}
         n:=n+ 1 ;
       end;
   end;
   
   end.
...
Рейтинг: 0 / 0
18.07.2003, 11:36
    #32211861
voodoos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закачать файл на сервер
hDrummer Ту идёт речь об ASP.Net а не об обычном ASP, в ASP.Net не нужно использовать COM или ActiveX
...
Рейтинг: 0 / 0
18.07.2003, 12:22
    #32211957
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закачать файл на сервер
в форуме то да, но в вопросе написано
в моем ASP файле
...
Рейтинг: 0 / 0
22.07.2003, 18:11
    #32214905
voodoos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закачать файл на сервер
А я вот чёто подумал что имеется в виду именно ASP.Net. Я тоже по привычке иногда вместо ASP.Net пишу или говорю просто ASP. Но видимо всётаки речь была об обычном ASP
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как закачать файл на сервер / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]