Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   ASP: Загрузка файлов на сервер (http://forum.oszone.net/showthread.php?t=76514)

mrcnn 21-12-2006 15:03 527551

ASP: Загрузка файлов на сервер
 
Есть файл:
inetpub/wwwroot/start.htm
Код:

<html>
<body>
<form action="http://127.0.0.1/matrix.asp" method="POST" name="f">
<input type="file" name="fname">
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

Есть файл

inetpub/wwwroot/matrix.asp
Код:

<% @Language = "VBScript" %>

<html>

<%
dim wrk,n,i,n1
n=request.querystring("fname")
dim fso,ts,s,ss,x
const fr=1
n1=server.mappath(".")&"\"&n
set fso=createobject("scripting.filesystemobject")
set ts=fso.opentextfile(n1,fr)
s=ts.readall
ts.close
a=split(s)
call(response.write("Исходные данные"))
s=0
for i=lbound(a,1) to ubound(a,1)
call response.write (a(i)&"<br>")
x=clng(a(i))
s=s+x
next
call response.write("<br>"&s)
%>

</html>

На 12 строке выдается ошибка.
Код:

Технические сведения (для сотрудников службы поддержки)

Тип ошибки:
Ошибка выполнения Microsoft VBScript (0x800A004C)
Путь не найден
/matrix.asp, line 12

Страница:
POST 32 bytes to /matrix.asp

POST Data:
fname=C%3A%5C1.txt&submit=submit

Время:
21 декабря 2006 г., 20:05:50

Почему? Как сделать правильно?

Задача : загрузить файл на сервер и прочитать его содержимое.

Prisoner 21-12-2006 15:44 527570

Попробуйте добавить в тег формы атрибут
Код:

enctype="multipart/form-data"
.

mrcnn 21-12-2006 16:07 527583

Добавление enctype="multipart/form-data" не помогает.

Код:

Тип ошибки:
Ошибка выполнения Microsoft VBScript (0x800A004C)
Путь не найден
/matrix.asp, line 12


Тип обозревателя:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727)

Страница:
POST 295 bytes to /matrix.asp

POST Data:
. . .

POST Data пустая

Может быть проблема в этой строке:
n1=server.mappath(".")&"\"&n
Мне не совсем понятно, как она работает.

Prisoner 21-12-2006 17:15 527623

server.mappath - возвращает абсолютный путь для относительного заданного в качестве аргумента (яндекс помог). Стало быть в nl теперь путь к открываемому файлу, но заданный абсолютно. Имя частично берется из формы (n=request.querystring("fname")). Для меня остается загадкой только кто файл положил туда где он ожидается, а ожидается он рядом со скриптом matrix.asp как видно из генерации имени. Кстати... попробуйте отправлять через форму файлы с англ. именами.

mrcnn 21-12-2006 17:48 527633

Цитата:

Для меня остается загадкой только кто файл положил туда где он ожидается, а ожидается он рядом со скриптом matrix.asp как видно из генерации имени.
В форме пользователь задает имя файла, лежащего у него на компьютере, например, "C:/1.txt". Как ASP скрипт может открыть этот файл на компе пользователя?

Prisoner 21-12-2006 18:54 527655

Если сервер и клиент - одна машина, то легко :).

mrcnn 21-12-2006 19:41 527668

Нет, сервер и клиент не одна машина.
Тестировать можно когда скрипт и клиент на одной машине, но скрипт должен работать, когда сервер на другой машине. Записывать скриптом на сервер нельзя.

Sham 22-12-2006 00:06 527742

mrcnn
Цитата:

n=request.querystring("fname")
тогда уж request.form("fname") коли POST шлешь...
Цитата:

n1=server.mappath(".")&"\"&n
я не понял, что ты этим хочешь получить... n - у тебя же данные поля (POST-data). гоголь-моголь какой-то...

короче, обрадую тебя - ASP не может делать upload в чистом виде, а потому, все что ты придумал - галиматья :) ASP сам по себе мало что умеет, ему нужны соотв. компоненты, коих предостаточно... нпр. посмотри тут (неплохой инструмент для загрузки)... или при желании пиши код анализа POST-данных в случае multipart/form-data :)

mrcnn 22-12-2006 05:57 527782

Цитата:

потому, все что ты придумал - галиматья
Спешу тебя обрадовать, что в этом скрипте я сам ничего не придумывал - его придумал препод.

Конкретных рекомендаций - ноль. На этом форуме помочь явано не в состоянии.

Sham 22-12-2006 11:52 527865

mrcnn не, где у тебя файл читается - там вроде ок все... но файл то еще поискать надо, тем более, что его вообще нет. :) Т.е. в твоем случае надо вывести n (который request.form("fname")), и пусть твой препод читает... или записать этот n в файл, потом этот файл прочитать... при том, что n предварительно надо обработать, дабы вытащить непосредственно тело файла...

в первоначальном виде (без enctype="multipart/form-data") форма шлет только текст пути... т.е. чтобы у тебя заработало (!!! (с) кот Матроскин) надо ввести имя файла (без пути) и этот файл положить рядышком со скриптом... :) будет эдакая эмуляция upload... :)

P.S. а твой препод - лопух :)

mrcnn 22-12-2006 13:18 527918

Цитата:

mrcnn не, где у тебя файл читается - там вроде ок все... но файл то еще поискать надо, тем более, что его вообще нет. Т.е. в твоем случае надо вывести n (который request.form("fname")), и пусть твой препод читает... или записать этот n в файл, потом этот файл прочитать... при том, что n предварительно надо обработать, дабы вытащить непосредственно тело файла...

в первоначальном виде (без enctype="multipart/form-data") форма шлет только текст пути... т.е. чтобы у тебя заработало (!!! (с) кот Матроскин) надо ввести имя файла (без пути) и этот файл положить рядышком со скриптом... будет эдакая эмуляция upload...
Прочитать на сервере файл, который лежит рядом со скриптом - это примитивная вещь.
Меня интересует, как самыми простыми средствами получить файл, лежащий у клиента и путь к которому он указал, найдя файл с помощью browse.
Мы использовали enctype="multipart/form-data" . Получается, что файл мы получили или нет? Где хранится вся инфа, которую мы получили?
Хотя бы ссылку на статью или на какую-нибудь книгу, где этот вопрос рассматривается..

Sham 22-12-2006 16:00 528016

mrcnn еще раз... в ASP не предусмотрена функция file upload, т.е. нет средств преобразования multipart/form-data непосредственно в файл. Для этого ты можешь сам написать код, который парсит данные POST и делает из них что надо... но я тебе уже дал ссылку (как вариант), где все это написано, и причем неплохо... Идешь туда, качаешь скриптики, ставишь у себя и... все! Конечно, надо изучить работу, объекты и тп (несложно)...
Цитата:

Где хранится вся инфа, которую мы получили?
у тебя - в переменной n (которая дб request.form("fname"), а еще лучше Request.BinaryRead(Request.TotalBytes) - в бинарном виде для дальнейшей обработки). Выведи ее в браузер, все увидишь (только request.form)...

mrcnn 17-05-2015 09:05 2508231

Препод не лопух. Вспоминаю свои старые сообщения.

alef2474 17-05-2015 14:23 2508332

Цитата:

Цитата mrcnn
Препод не лопух. Вспоминаю свои старые сообщения. »

Что толку так вспоминать. Лучше указать-объяснить, в чем была ошибка.


Время: 11:24.

Время: 11:24.
© OSzone.net 2001-