У меня есть сайт с формой для загрузки файлов. Я хочу автоматически входить в систему и загружать файлы изображений, когда изменения меняются в моей локальной папке на моем компьютере. Могут ли быть предоставлены какие-либо указания по этому вопросу.Автоматический загрузчик файлов на сайт
ответ
В соответствии с моим пониманием вы можете написать задачу для этой цели, которая может запускаться, позволяет говорить каждый час и проверять, внесены ли какие-либо изменения в каталог, а затем загрузить эти файлы в ваше приложение.
Я не знаю, на какой системе вы работаете, но вы можете сделать что-то подобное. Если вы находитесь в системе linux, вы можете использовать команду watch для отслеживания активности выбранного каталога. То, что вы можете сделать, это использовать что-то вроде Mechanize в рубиновом скрипте, который запускается командой watch, которая затем отправляется и отправляет форму и выгружает файл для вас, выбирая файл с последней датой создания.
Я понимаю, что он говорит, рубин на рельсах в пост, но этот ответ является столь же законно, как писать решение в Ruby (и немного легче/быстрее)
Использование Qt C++, чтобы сделать это, то вам могли бы сделать что-то вроде этого:
(непроверенные, вам придется внести коррективы для вашей конкретной ситуации)
Обзор кодекса:
- Создайте программу, которая закругляется на Ti mer каждые 20 минут и проходит через весь каталог, который вы указываете с помощью
WATCH_DIR
, и если он находит файлы в этом каталоге, которые были изменены в промежутке времени, в течение которого последний цикл выполнялся (или после запуска программы, но до запуска первого цикла), то он загружает, что точный файл в любой URL вы задаете сUPLOAD_URL
затем создайте файл с именем AutoUploader.pro
и файл с именем main.cpp
AutoUploader.pro
QT += core network
QT -= gui
CONFIG += c++11
TARGET = AutoUploader
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
main.cpp
#include <QtCore/QCoreApplication>
#include <QtCore/qglobal.h>
#include <QDir>
#include <QDirIterator>
#include <QNetworkAccessManager>
#include <QTimer>
#include <QByteArray>
#include <QHash>
#define WATCH_DIR "/home/lenny/images"
#define UPLOAD_URL "http://127.0.0.1/upload.php"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MainLoop loop(WATCH_DIR);
return a.exec();
}
class MainLoop : public QObject {
Q_OBJECT
public:
MainLoop(QString _watch_directory = qApp->applicationDirPath()) {
watch_directory = _watch_directory;
// the ACTION="" part of the upload form
website_upload_url = UPLOAD_URL;
/* 20 minutes
20 * 60 * 1000 = num of milliseconds that makes up
20 mins = 1200000 ms */
QTimer::singleShot(1200000, this, SLOT(check_for_updates()));
/* this will stop any file modified before you ran this program from
being uploaded so it wont upload all of the files at runtime */
program_start_time = QDateTime::currentDateTime();
}
QDateTime program_start_time;
QString watch_directory;
QString website_upload_url;
// hash table to store all of the last modified times for each file
QHash<QString, QDateTime> last_modified_time;
~MainLoop() { qApp->exit(); }
public slots:
void check_for_updates() {
QDirIterator it(QDir(watch_directory));
/* loop through all file in directory */
while (it.hasNext()) {
QFileInfo info(it.next());
/* check to see if the files modified time is ahead of
program_start_time */
if (info.lastModified.msecsTo(program_start_time) < 1) {
upload_file(info.absoluteFilePath());
}
}
/* set program_start_time to the current time to catch stuff next
time around and then start a timer to repeat this command in
20 minutes */
program_start_time = QDateTime::currentDateTime();
QTimer::singleShot(1200000, this, SLOT(check_for_updates()));
}
/* upload file code came from
https://forum.qt.io/topic/11086/solved-qnetworkaccessmanager-uploading-files/2
*/
void upload_file(QString filename) {
QNetworkAccessManager *am = new QNetworkAccessManager(this);
QString path(filename);
// defined with UPLOAD_URL
QNetworkRequest request(QUrl(website_upload_url));
QString bound="margin"; //name of the boundary
//according to rfc 1867 we need to put this string here:
QByteArray data(QString("--" + bound + "\r\n").toAscii());
data.append("Content-Disposition: form-data; name=\"action\"\r\n\r\n");
data.append("upload.php\r\n");
data.append("--" + bound + "\r\n"); //according to rfc 1867
data.append(QString("Content-Disposition: form-data; name=\"uploaded\"; filename=\"%1\"\r\n").arg(QFileInfo(filename).fileName()));
data.append(QString("Content-Type: image/%1\r\n\r\n").arg(QFileInfo(filename).suffix())); //data type
QFile file(path);
if (!file.open(QIODevice::ReadOnly))
return;
data.append(file.readAll()); //let's read the file
data.append("\r\n");
data.append("--" + bound + "--\r\n");
request.setRawHeader(QString("Content-Type").toAscii(),QString("multipart/form-data; boundary=" + bound).toAscii());
request.setRawHeader(QString("Content-Length").toAscii(), QString::number(data.length()).toAscii());
this->reply = am->post(request,data);
connect(this->reply, SIGNAL(finished()), this, SLOT(replyFinished()));
}
void replyFinished() {
/* perform some code here whenever a download finishes */
}
};
Перед запуском программы убедитесь, что прочитать его полностью и внести необходимые изменения, читая комментарии и пост - также вам, возможно, придется установить фрейм qt в зависимости от вашей платформы
В любом случае, последний шаг - запустить qmake
, чтобы создать файл проекта и, наконец, make
, чтобы построить двоичный файл.
Очевидно, что последние шаги различаются в зависимости от используемой вами системы.
... Эта программа будет продолжать работать ... по существу навсегда, пока вы не закроете его .... загрузку измененные файлы каждые 20 минут
Надеются, что это помогает ...
- 1. Автоматический загрузчик
- 2. Автоматический вход на сайт
- 3. Автоматический вход на сайт
- 4. Автоматический вход на сайт программируемо?
- 5. JSOUP Автоматический вход на сайт
- 6. динамический веб-сайт автоматический снимок
- 7. стандартный автоматический вход на веб-сайт партнерства?
- 8. Автоматический вход на сайт ASP.NET с C#
- 9. Автоматический ввод поля на внешний сайт
- 10. Многопользовательский загрузчик файлов
- 11. Простой загрузчик файлов
- 12. Сегментированный загрузчик файлов C#
- 13. Как отключить загрузчик файлов?
- 14. Ищет загрузчик файлов jQuery
- 15. Безопасный загрузчик файлов ASP.net
- 16. PHP рекурсивный загрузчик файлов
- 17. Как создать автоматический новостной сайт?
- 18. загрузчик файлов с php на веб-страницу
- 19. Автоматический выбор файлов для загрузки
- 20. Автоматический веб-сайт оси оси
- 21. автоматический перезапуск пакетных файлов
- 22. загрузчик файлов 3DS для opengl
- 23. Flash-загрузчик файлов для ASP.NET
- 24. C#: Как TDD загрузчик файлов
- 25. Android OpenGL .OBJ загрузчик файлов
- 26. автоматический GWT ClientBundles на основе дисковых файлов
- 27. Удаленный загрузчик файлов Проверка прототипа
- 28. Почему загрузчик файлов не работает?
- 29. Есть ли загрузчик файлов для файлов .node?
- 30. MVC загрузчик файлов возвращает нуль
Возможно, вам придется написать собственное приложение, так как такая функциональность будет представлять угрозу безопасности и, скорее всего, не будет поддерживаться обычными браузерами. – mike510a
Не могли бы вы рассказать? Я немного новичок в вещах. Какой подход будет работать? –
Сайт для локальных файлов на вашем компьютере не совпадает с вашим сайтом, и для предотвращения XSS (межсайтовый скриптинг) единственным способом отправки файла на веб-сайт является выбор пользователем файла , Theres не может опросить локальный диск машины с веб-сайта или из javascript, чтобы определить, изменился ли файл (по крайней мере, не то, что я знаю) – mike510a