Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
artsyd
0 / 0 / 0
Регистрация: 25.05.2006
Сообщений: 7
1

Будет ли работать код?

25.05.2006, 17:57. Просмотров 1558. Ответов 10
Метки нет (Все метки)

Здравствуйте!
Вот, надыбал код по аплоаду файлов. Почитав посты, понял что аплоад, эт очень сложная тема, но на локалхосте все прекрасно работает. А будет ли работать на серваке? Если нет, то почему?
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
strFilePath = request.form("imagepath") //берем путь к файлу у клиента
if not strFilePath="" then // если на пустой
  strUpFilePath = server.mappath("carimgupimage.jpg")  //путь к файлу на серваке
  Set objStream = Server.CreateObject("ADODB.Stream")
  objStream.Open
  objStream.Type = 1
  objStream.LoadFromFile strFilePath // загружаем у клиента
  objStream.SaveToFile strUpFilePath // сохраняем на сервер
  objStream.Close
  Set objStream = Nothing
  rs.fields("img")=strUpFilePath
end if
Если работать не будет,то ссылки на сторонние компоненты можно не давать
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2006, 17:57
Ответы с готовыми решениями:

Прокси для https - будет ли работать приведенный код?
Здравствуйте, спасибо что заинтересовались темой ) У меня возник вопрос после того, как увидел код...

Как может сервер-сайд код работать или не работать на конкретном компе?
Всем привет! Вот такая проблема. Есть сайт, все работает ок, но - один из компов имеющий Win98 и...

Будет ли работать Application_OnEnd?
Будет ли работать Application_OnEnd, если просто переписать global.asa? Лень пробовать, может уже...

Можно ли и где взять дистрибутив ASP NET, и будет ли работать сервер под XP?
Товарищи подскажите пожалуйста можно ли и где взять дистрибутив ASP NET, и будет ли работать сервер...

Будет ли работать сайт на MVC3 на Windows Server 2003 R2
Собираюсь выложить сайт на VPS, создал тему что-бы задавать вопросы по мере появления. Первое что...

10
bazile
66 / 42 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
25.05.2006, 18:03 2
Работать не будет так как метод objStream.LoadFromFile никогда в жизни не сможет считать локальный файл у клиента с сервера. У тебя этот код работает потому, что сервер и клиент это одна машина.
0
ambarka2
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 116
25.05.2006, 18:07 3
ну если в локальной сети, и файл виден с сервака... то будет
0
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
25.05.2006, 18:12 4
Бред.

Такая ситуация практически никогда не возникает.

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

Юзайте нормальные компоненты.
0
ambarka2
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 116
25.05.2006, 18:32 5
я потому и улыбнулся
0
ambarka2
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 116
25.05.2006, 20:07 6
В принципе вот тут посидел немного...
Если ограничится невысокими требованиями, то можно и без всяких компонент аплоадить файлы, ничего тут сложного нету.
Значит, чем полуется клиент (файл myform.htm):
Код
<html>
  <head>
    <title></title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1 
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5 http://schemas.microsoft.com/intellisense/ie5 
  </head>
  <body>
    <form action="stupid_upload.asp" method="post" enctype="multipart/form-data 
      <input type="file" name="myfile_field" value=" 

      <input type="submit" value="отправить 
    </form>
  </body>
</html>
На сервере в корневой дирекории сайта делаем папку upload_dir (это нужно для скрипта, но всегда можно подправить под себя)
Работает такой скриптик(файл stupid_upload.asp):[code]
<%@ Language=VBScript %><%Option Explicit%><META content="Microsoft Visual Studio .NET 7.1" name=GENERATOR><%Const c_filename_var = "filename="""Dim bResultOkbResultOk = falseDim objStream1Dim CountBytesDim ServerFilePath, ClientFileNameCountBytes = Request.TotalBytesSet objStream1 = Server.CreateObject("ADODB.Stream") 'сюда будем складывать, что прилетело с html формы методом postobjStream1.Type = 1 'adTypeBinaryobjStream1.OpenobjStream1.Write Request.BinaryRead(CountBytes) 'данные приняли'чисто для эксперимена можно посмотреть что пришло 'собственно туда, в этот файл, я и смотрел когда писал этот скрипт'ServerFilePath = Server.MapPath("./upload_dir") & "upload2.txt"'objStream1.SaveToFile ServerFilePath, 2 'adSaveCreateOverWrite'меняем тип у потока на текстовыйobjStream1.Position = 0objStream1.Type = 2 'adTypeTextobjStream1.Charset = "windows-1251"'сохраняем в текстовой переменнойDim myTextmyText = objStream1.ReadTextobjStream1.Position = 0'чисто для эксперимента сравниваем длину'Response.Write("CountBytes=" & CountBytes & "
" & vbCrLf)'Response.Write("Len(myText)=" & Len(myText) & "
" & vbCrLf)'далее идут действия, чтобы "вычленить" файл из портянкиDim Pos_1BR, Pos_2BR, DelimPos_1BR = InStr(1, myText, vbCrLf)If Pos_1BR > 0 Then Pos_2BR = InStr(Pos_1BR + 1, myText, vbCrLf) Delim = Left(myText, Pos_1BR - 1) 'это у нас делемитер (при enctype="multipart/form-data") Dim PosFileName Dim UserFilePath PosFileName = InStr(myText, c_filename_var) 'начало строчки содержащей название файла If PosFileName < Pos_2BR Then 'если нашли начало строчки там где она должна быть... PosFileName = PosFileName + Len(c_filename_var) 'корректируем переменную, чтобы указывала на начало искомого UserFilePath = Mid(myText, PosFileName, Pos_2BR - PosFileName - 1) 'Response.Write("UserFilePath=" & UserFilePath & "
" & vbCrLf) Dim tArr 'массив где будут лежать составляющие пути файла tArr = Split(UserFilePath, "", -1) ClientFileName = tArr(UBound(tArr)) 'берем последний элемент массива - оно же название файла. 'Response.Write("ClientFileName=" & ClientFileName & "
" & vbCrLf) Dim Pos_DoublBR, Pos_NextDelim Pos_DoublBR = InStr(myText, vbCrLf & vbCrLf) 'положение начала файла (без учета длины vbCrLf & vbCrLf) Pos_NextDelim = InStr(Pos_1BR, myText, Delim) 'положение конца файла (без учета длины vbCrLf) Dim CntBytesInFile CntBytesInFile = (Pos_NextDelim - 2) - (Pos_DoublBR + 4) 'высчитываем длину файла Dim objStream2 Set objStream2 = Server.CreateObject("ADODB.Stream") 'сюда положи ml>
<head>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1
</head>
<body>
<%
Const c_filename_var = "filename="""
Dim bResultOk
bResultOk = false
Dim objStream1
Dim CountBytes
Dim ServerFilePath, ClientFileName
CountBytes = Request.TotalBytes
Set objStream1 = Server.CreateObject("ADODB.Stream") 'сюда будем складывать, что прилетело с html формы методом post
objStream1.Type = 1 'adTypeBinary
objStream1.Open
objStream1.Write Request.BinaryRead(CountBytes) 'данные приняли
'чисто для эксперимена можно посмотреть что пришло
'собственно туда, в этот файл, я и смотрел когда писал этот скрипт
'ServerFilePath = Server.MapPath("./upload_dir") & "upload2.txt"
'objStream1.SaveToFile ServerFilePath, 2 'adSaveCreateOverWrite
'меняем тип у потока на текстовый
objStream1.Position = 0
objStream1.Type = 2 'adTypeText
objStream1.Charset = "windows-1251"
'сохраняем в текстовой переменной
Dim myText
myText = objStream1.ReadText
objStream1.Position = 0
'чисто для эксперимента сравниваем длину
'Response.Write("CountBytes=" & CountBytes & "
" & vbCrLf)
'Response.Write("Len(myText)=" & Len(myText) & "
" & vbCrLf)
'далее идут действия, чтобы "вычленить" файл из портянки
Dim Pos_1BR, Pos_2BR, Delim
Pos_1BR = InStr(1, myText, vbCrLf)
If Pos_1BR > 0 Then

Pos_2BR = InStr(Pos_1BR + 1, myText, vbCrLf)

Delim = Left(myText, Pos_1BR - 1) 'это у нас делемитер (при enctype="multipart/form-data")

Dim PosFileName
Dim UserFilePath
PosFileName = InStr(myText, c_filename_var) 'начало строчки содержащей название файла

If PosFileName < Pos_2BR Then 'если нашли начало строчки там где она должна быть...
PosFileName = PosFileName + Len(c_filename_var) 'корректируем переменную, чтобы указывала на начало искомого

UserFilePath = Mid(myText, PosFileName, Pos_2BR - PosFileName - 1)
'Response.Write("UserFilePath=" & UserFilePath & "
" & vbCrLf)

Dim tArr 'массив где будут лежать составляющие пути файла

tArr = Split(UserFilePath, "", -1)

ClientFileName = tArr(UBound(tArr)) 'берем последний элемент массива - оно же название файла.
'Response.Write("ClientFileName=" & ClientFileName & "
" & vbCrLf)

Dim Pos_DoublBR, Pos_NextDelim

Pos_DoublBR = InStr(myText, vbCrLf & vbCrLf) 'положение начала файла (без учета длины vbCrLf & vbCrLf)
Pos_NextDelim = InStr(Pos_1BR, myText, Delim) 'положение конца файла (без учета длины vbCrLf)

Dim CntBytesInFile
CntBytesInFile = (Pos_NextDelim - 2) - (Pos_DoublBR + 4) 'высчитываем длину файла

Dim objStream2
Set objStream2 = Server.CreateObject("ADODB.Stream") 'сюда положим наш файл
objStream1.Type = 1 'adTypeBinary
objStream1.Position = Pos_DoublBR + 4 - 1 'встаем в потоке1 на начало файла

objStream2.Type = 1 'adTypeBinary
objStream2.Open
objStream2.Write objStream1.Read(CntBytesInFile) 'записываем в поток2 из потока1

ServerFilePath = Server.MapPath("./upload_dir") & "" & ClientFileName 'подсуетимся с полным путем дл
0
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
25.05.2006, 20:11 7
на activeserverpages.ru лежал скрипт для аплоада.

но он досточно трмозной. Если файл до 100 кб, то нормально. Иначе - тормоза жуткие.
0
ambarka2
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 116
25.05.2006, 20:20 8
Я кажется знаю почему там такой тормознутый скрипт, возможно там используется функция MidB() (или просто Mid) , как в примере в MSDN для аплода, и там для каждого байта она вызывается в цикле, что и порождает тормоза.
Ведь все это извращение с Mid()-ом для преобразования бинарных данных в строку, для последующего распарсивания html портянки.
Я вот сейчас применил другой метод, вроде бы тормозов не заметил, 5 мегабайт аплоадит только в путь.
0
ambarka2
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 116
25.05.2006, 21:06 9
Сейчас попробовал большой файл (340 Мб) закачать и ... недождусь окончания.
inetinfo и dllhost скушали всю память, весь 1 гиг (как в анекдоте: - весь воздушный флот?! - да, оба самолета.)
может это и не в скритпе дело, а может и в скрипте... Там 2 stream-а и одна текстовая переменная, получается жирных 3 куска памяти (примерно 3х340 откушается полюбому); что, конечно, не есть хорошо...
надо бы попробовать с компонентами - какие фалы они могут кушать...
но такое чувство у меня, что тут дело еще и в IIS-е, странно он как то принимает большие объемы..., даже без обрабатывающего скрипта...
0
Alexey Spirin
1 / 1 / 1
Регистрация: 18.10.2007
Сообщений: 1,750
25.05.2006, 21:10 10
Не парься - настрой FTP сервер.
0
artsyd
0 / 0 / 0
Регистрация: 25.05.2006
Сообщений: 7
26.05.2006, 02:13  [ТС] 11
Хм.. Спасибо, что объяснили.. А я то думал, что все так просто.
Можете поподробнее объяснить процесс "вычленения файла из портянки" в коде Амбарки2? В остальном вроде разобрался. Большое спасибо.</DIV>
0
26.05.2006, 02:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2006, 02:13

Будет ли работать код?
Привет! Помогите пожалуйста разобраться, будет ли работать этот код для кнопки. on (press) {...

Будет ли работать данный код?
Здравствуйте. У меня есть вопрос. Будет ли работать этот код и если нет, то как исправить? Заранее...

Будет ли работать этот код?
Здравствуйте. У меня есть вопрос. Будет ли работать данный PHP код? Заранее спасибо за ответ. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru