رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 0
mohammad_0111

آپلود فایل داخل هاست با FTP در Qt و QML با JS


سوال

سلام.وقتتون بخیر.
خسته نباشید.
سوالی که برای من پیش اومده وقتی میخام داخل qml فایل رو از File Dialog دریافت کنم و با FTP آپلود کنم روی هاست متاسفانه این امکان وجود نداره سمت بک اند هم نتونستم حتی فایل رو پاس بدم و یا آپلود کنم، ولی بیشتر دوس دارم این کارو با js داخل qml انجام بدم ولی حتی نتونستم فایل رو با File Dialog بگیرم.

ممنون میشم راهنمایی کنید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0
در 11 ساعت قبل، mohammad_0111 گفته است :

سلام.وقتتون بخیر.
خسته نباشید.
سوالی که برای من پیش اومده وقتی میخام داخل qml فایل رو از File Dialog دریافت کنم و با FTP آپلود کنم روی هاست متاسفانه این امکان وجود نداره سمت بک اند هم نتونستم حتی فایل رو پاس بدم و یا آپلود کنم، ولی بیشتر دوس دارم این کارو با js داخل qml انجام بدم ولی حتی نتونستم فایل رو با File Dialog بگیرم.

ممنون میشم راهنمایی کنید.

سلام،

برای این کار بهترین روش این هست که سمت ++C چنین نیاز رو پوشش دهید، به کمک کلاس‌های موجود در ماژول QtNetwork مانند QNetworkAccessManager و QNetworkReply.

اما اگر تأکید بر این دارید که در سمت Qt Quick و JS این کار صورت بگیره، می‌تونم پیشنهاد کنم از شیء XMLHttpRequest استفاده کنید.

برای دریافت فایل هم کافی است مسیر گرفته شده از طریق FileDialog را به درستی در ورودی تابع send از XMLHttpRequest تعریف کنید.

در صورت نیاز کدتون رو قرار بدین تا بیشتر بررسی بشه.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
ارسال شده در (ویرایش شده)
در در 18 خرداد 1400 در 11:07، کامبیز اسدزاده گفته است :

سلام،

برای این کار بهترین روش این هست که سمت ++C چنین نیاز رو پوشش دهید، به کمک کلاس‌های موجود در ماژول QtNetwork مانند QNetworkAccessManager و QNetworkReply.

اما اگر تأکید بر این دارید که در سمت Qt Quick و JS این کار صورت بگیره، می‌تونم پیشنهاد کنم از شیء XMLHttpRequest استفاده کنید.

برای دریافت فایل هم کافی است مسیر گرفته شده از طریق FileDialog را به درستی در ورودی تابع send از XMLHttpRequest تعریف کنید.

در صورت نیاز کدتون رو قرار بدین تا بیشتر بررسی بشه.

سلام استاد.وقتتون بخیر.
امیدوارم حالتون خوب باشه.
من از کدهای زیر استفاده کردم ولی متاسفانه خطا داشت. حالا یه مشکل دیگه هم بود اینکه احساس میکنم تو این روش به پوشه بندی های درون پوشه اصلی FTP نمیشه دسترسی داشت.
 

function uploadFile(filePath){
    var xml = new XMLHttpRequest();
    xml.onreadystatechange = function(){
        if(this.status === 200 && this.readyState === 4){
            console.log(true);
        }
        else{
            console.log(false);
        }
    }
    xml.open('POST','serverip',true,'username','password');
    xml.send()
}

درکل من به این صورت استفاده کردم ولی مشکل داشت.و فکر کنم محدودیت هم داره.
درمورد کتابخونه های داخل Qt که بهشون اشاره کردین مثالی یا چیزی باشه که بتونم آپلود فایل رو پیاده کنم ممنون میشم.

ویرایش شده در توسط mohammad_0111

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

درود،
خب خطای ساطع شده چی هست؟ از سمت سرور چه پیامی دریافت می‌کنید؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 23 خرداد 1400 در 08:56، کامبیز اسدزاده گفته است :

درود،
خب خطای ساطع شده چی هست؟ از سمت سرور چه پیامی دریافت می‌کنید؟

سلام استاد.وقت بخیر.
متاسفانه من چک کردم و ارور نامشخص بود بصورت زیر:
 

qml: undefined
qml: undefined

کدهای خودم رو هم چک کردم با اینکه آدرس فایل رو به تابع ارسال میکردم ولی اصلا داخل متد ازش استفاده نکرده بودم و درکل جایی هم نتونستم پیدا کنم که بهش آدرس فایل رو پاس بدم.
 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 23 خرداد 1400 در 08:56، کامبیز اسدزاده گفته است :

درود،
خب خطای ساطع شده چی هست؟ از سمت سرور چه پیامی دریافت می‌کنید؟

من با خود Qt هم تست کردم ولی بازم به مشکل خوردم.
 

ftp::ftp(QObject *parent) : QObject(parent)
{
    connect(&manager, &QNetworkAccessManager::finished, this, &ftp::finished);
}

void ftp::uploadFile(QString path)
{
    QString disposition = "form-data; name=\"image\"";
    if(path.startsWith("file:///")) path = path.remove(0,8);

    QFileInfo fileInfo(path);
    if(!fileInfo.exists())
    {
        complete("1000");
    }

    QMimeDatabase db;
    QMimeType type = db.mimeTypeForFile(path);
    QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);

    QHttpPart part;
    part.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(type.name()));
    part.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(disposition));

    QFile *file = new QFile(path);
    file->open(QIODevice::ReadOnly);
    part.setBodyDevice(file);
    file->setParent(multiPart);

    multiPart->append(part);

    QNetworkRequest request;
    QUrl url;
    url.setUrl(ftpUrl);
    url.setUserName(ftpUsername);
    url.setPassword(ftpPassword);
    request.setUrl(url);

    QNetworkReply *reply = manager.put(request,multiPart);
    multiPart->setParent(reply);

    files.insert(reply,file);
}

void ftp::finished(QNetworkReply *reply)
{
    QVariant statusCode = reply->attribute( QNetworkRequest::HttpStatusCodeAttribute );

    emit complete(statusCode.toString());

}


من وقتی آدرس ftp رو به شکل صحیح یعنی  

"ftp://..."

نه تنها نتیجه بلکه هیچ اروری هم دریافت نمیکنم.
ولی وقتی ادرس رو بصورت:

"http://..."

ارور 405 دریافت میکنم.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...