powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузка файла на сервер через форму
9 сообщений из 9, страница 1 из 1
Загрузка файла на сервер через форму
    #35102292
m0zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как через форму сохранить файл на сервере

вот элемент формы
<input name="DefFile" type="file" style="margin-left:108px;" size="35">

Вот его описание в классе
Property DefFile As %Stream(LOCATION = "C:\Apache\htdocs\csp\pss\defects\files", STORAGE = "FILE") [ Collection = binarystream ];

на кнопке формы стоит OnClick=#call(..sumbitform(....,self.document.add.DefFile.value,....))#;

Вот часть метода
<script language="cache" method="submitform" arguments="..., DefFile:%Stream,..." returntype="">
New type, sc
Set type=##class(P.Defect).%New()
...
Set type.DefFile=DefFile
...
</script>

Проблема в том, что все поля из формы сохраняются, а файл нет. В чём ошибка? Папка по указанному пути есть.

И, кстати, если предполагается, что сохраняться должны текстовые файлы и картинки, то бинарный тип подходит?
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35102389
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка в том, что файл Вы через гиперсобытие не прогоните, ножно использовать
submit и <form method=post>

Любви.
logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35103644
m0zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. убрать событие с кнопки, поменять на submit, добавить метод post. Метод перенесу в класс. В нём что-нибудь изменять нужно? Или в классе?

Т.е. этого для сохранения файла достаточно?

<input name="DefFile" type="file" style="margin-left:108px;" size="35">

Класс
....
Property DefFile As %Stream(LOCATION = "C:\Apache\htdocs\csp\pss\defects\files", STORAGE = "FILE") [ Collection = binarystream ];
...

Метод класса
...
Set type.DefFile=DefFile
...
И метод будет принимать параметр для файла как DefFile As %Stream

Так будет правильно?
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35105118
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, в примерах есть:
http://localhost:57772/csp/samples/upload.csp
--------
Cache for Windows (x86-32) 2007.1.1 (Build 420.0U_SU) Tue Jul 10 2007 14:04:48 EDT
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35105544
m0zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то мне этот пример совсем не помог, к тому же, он ничего никуда не загружает. А мне нужно чтоб с базой работал, т.е. сохранял значение(имя, например) + загружал в определённую директорию
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35105547
m0zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем, тестирую теперь в отдельном классе и отдельной форме с одним полем:

Класс:
Class P.Test Extends %Persistent [ ClassType = persistent ]
{

Property FileStream As %Stream(LOCATION = "C:\", STORAGE = "FILE") [ Collection = binarystream ];

ClassMethod AddNewFile(FileStream As %Stream) As %Integer
{
New type,sc

Set type=##class(P.Test).%New()
Set type.FileStream=FileStream

Set sc=type.%Save()
do type.%Close()

If ($$$ISERR(sc)) &js<alert('Невозможно создать статус работы.');> QUIT 0

QUIT 1
}
}

А вот форма:
<form action="upload.csp" enctype="multipart/form-data" method="post">
Enter a file to upload here: <input name="FileStream" size=30 type=file>
<p>
<ul><input type="submit" name="add" value="Upload file"></ul>
<p>
</form>

<script language="cache" runat="server">
if %request.Get("add")'=""
{
do ##class(P.Test).AddNewFile(%request.Get("FileStream"))
}
</script>

Через SQL-менеджер делаю SQL-запросы к этой таблице. Там создаётся новая запись, но постая, только ID. И, конечно, файл в C:\ не загружается. Что опять не так то??
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35105672
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот в этом куске у вас на сервере есть %request.MimeData("FileStream",1) -- загружаемый файл, делать с ним можно что угодно --- сохранять в базу или в папку.
Код: plaintext
1.
2.
3.
4.
5.
    <script language="Cache" runat="server">
        New bytes
        Set bytes=%request.MimeData("FileStream", 1 ).Read( 200 )
        Set bytes=##class(%CSP.Utils).DecodeData(bytes)
        Write bytes,!
    </script>
В вашем примере: вместо
Код: plaintext
do ##class(P.Test).AddNewFile(%request.Get("FileStream"))
написать
Код: plaintext
do ##class(P.Test).AddNewFile(%request.GetMimeData("FileStream"))
Вроде так.
--------
Cache for Windows (x86-32) 2007.1.1 (Build 420.0U_SU) Tue Jul 10 2007 14:04:48 EDT
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35106306
m0zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не работает :(. В корень диска C, как я указал в классе, ничего не загружает. А в базу что сохраняет в поле FileStream, я вообще не понимаю )). Пару символов каких-то - ||, e|, t| и т.п.
...
Рейтинг: 0 / 0
Загрузка файла на сервер через форму
    #35106321
m0zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот нашёл пример. Работает :)
<SCRIPT arguments="" LANGUAGE="CACHE" RUNAT="SERVER" method="OnPreHTTP" returntype="%Boolean">
if (%request.IsDefinedMimeData("FileStream"))
{
if (%request.GetMimeData("FileStream").Size>0)
{
s %session.Data("FileStream")=1

new dir, cont, loaded
s loaded=1

s dir="c:\"


Set file=##class(%File).%New(dir_"\ИМЯ_ФАЙЛА")
d file.Open("WSN")

while '(loaded>%request.GetMimeData("FileStream").Size)
{
s cont=%request.GetMimeData("FileStream").Read(loaded)
d file.Write(cont)
s loaded=loaded+1
}

d file.%Close()

kill dir,cont,loaded

}
}
</SCRIPT>

<form enctype="multipart/form-data" method="post" id="form1" name=form1 action="upload.csp">
<input type=file name="FileStream" size=30>
<input type=submit id=uploadform value='Загрузить удаленно'>
</form>

Только есть такой вопрос. Вот в этой строке как сделать, чтоб имя файла записывалось то, которое как раз и загружаем?
Set file=##class(%File).%New(dir_"\ИМЯ_ФАЙЛА")

И ещё, подскажите где и что дописать в коде, чтоб путь к файлу сохранялся в базе в каком нубиль поле, например Property File, чтоб я, исходя из этого, ссылку на него формировал.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузка файла на сервер через форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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