Показать полную графическую версию : 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
Попробуйте добавить в тег формы атрибут enctype="multipart/form-data".
Добавление 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
server.mappath - возвращает абсолютный путь для относительного заданного в качестве аргумента (яндекс помог). Стало быть в nl теперь путь к открываемому файлу, но заданный абсолютно. Имя частично берется из формы (n=request.querystring("fname")). Для меня остается загадкой только кто файл положил туда где он ожидается, а ожидается он рядом со скриптом matrix.asp как видно из генерации имени. Кстати... попробуйте отправлять через форму файлы с англ. именами.
Для меня остается загадкой только кто файл положил туда где он ожидается, а ожидается он рядом со скриптом matrix.asp как видно из генерации имени.
В форме пользователь задает имя файла, лежащего у него на компьютере, например, "C:/1.txt". Как ASP скрипт может открыть этот файл на компе пользователя?
Prisoner
21-12-2006, 18:54
Если сервер и клиент - одна машина, то легко :).
Нет, сервер и клиент не одна машина.
Тестировать можно когда скрипт и клиент на одной машине, но скрипт должен работать, когда сервер на другой машине. Записывать скриптом на сервер нельзя.
mrcnnn=request.querystring("fname") тогда уж request.form("fname") коли POST шлешь...
n1=server.mappath(".")&"\"&nя не понял, что ты этим хочешь получить... n - у тебя же данные поля (POST-data). гоголь-моголь какой-то...
короче, обрадую тебя - ASP не может делать upload в чистом виде, а потому, все что ты придумал - галиматья :) ASP сам по себе мало что умеет, ему нужны соотв. компоненты, коих предостаточно... нпр. посмотри тут (http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4) (неплохой инструмент для загрузки)... или при желании пиши код анализа POST-данных в случае multipart/form-data :)
потому, все что ты придумал - галиматья
Спешу тебя обрадовать, что в этом скрипте я сам ничего не придумывал - его придумал препод.
Конкретных рекомендаций - ноль. На этом форуме помочь явано не в состоянии.
mrcnn не, где у тебя файл читается - там вроде ок все... но файл то еще поискать надо, тем более, что его вообще нет. :) Т.е. в твоем случае надо вывести n (который request.form("fname")), и пусть твой препод читает... или записать этот n в файл, потом этот файл прочитать... при том, что n предварительно надо обработать, дабы вытащить непосредственно тело файла...
в первоначальном виде (без enctype="multipart/form-data") форма шлет только текст пути... т.е. чтобы у тебя заработало (!!! (с) кот Матроскин) надо ввести имя файла (без пути) и этот файл положить рядышком со скриптом... :) будет эдакая эмуляция upload... :)
P.S. а твой препод - лопух :)
mrcnn не, где у тебя файл читается - там вроде ок все... но файл то еще поискать надо, тем более, что его вообще нет. Т.е. в твоем случае надо вывести n (который request.form("fname")), и пусть твой препод читает... или записать этот n в файл, потом этот файл прочитать... при том, что n предварительно надо обработать, дабы вытащить непосредственно тело файла...
в первоначальном виде (без enctype="multipart/form-data") форма шлет только текст пути... т.е. чтобы у тебя заработало (!!! (с) кот Матроскин) надо ввести имя файла (без пути) и этот файл положить рядышком со скриптом... будет эдакая эмуляция upload...
Прочитать на сервере файл, который лежит рядом со скриптом - это примитивная вещь.
Меня интересует, как самыми простыми средствами получить файл, лежащий у клиента и путь к которому он указал, найдя файл с помощью browse.
Мы использовали enctype="multipart/form-data" . Получается, что файл мы получили или нет? Где хранится вся инфа, которую мы получили?
Хотя бы ссылку на статью или на какую-нибудь книгу, где этот вопрос рассматривается..
mrcnn еще раз... в ASP не предусмотрена функция file upload, т.е. нет средств преобразования multipart/form-data непосредственно в файл. Для этого ты можешь сам написать код, который парсит данные POST и делает из них что надо... но я тебе уже дал ссылку (как вариант), где все это написано, и причем неплохо... Идешь туда, качаешь скриптики, ставишь у себя и... все! Конечно, надо изучить работу, объекты и тп (несложно)...Где хранится вся инфа, которую мы получили? у тебя - в переменной n (которая дб request.form("fname"), а еще лучше Request.BinaryRead(Request.TotalBytes) - в бинарном виде для дальнейшей обработки). Выведи ее в браузер, все увидишь (только request.form)...
Препод не лопух. Вспоминаю свои старые сообщения.
alef2474
17-05-2015, 14:23
Препод не лопух. Вспоминаю свои старые сообщения. »
Что толку так вспоминать. Лучше указать-объяснить, в чем была ошибка.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.