# Ignition 7.9 FTP over TLS

**URL:** <https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818>\
**Category:** Ignition\
**Created:** [October 19, 2020, 11:23pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818 "2020-10-19T23:23:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [October 19, 2020, 11:23pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818/1 "2020-10-19T23:23:14Z")

</div>

I am trying to automate uploading a file to an FTP server that requires explicit FTP over TLS. I have tried using pythons ftplib, but that does not seem to have support for FTPS until 2.7.

I then wrote a script that used [org.apache.commons.net](http://org.apache.commons.net) and I though I had it working because it works in the script console, but when I try running it in the gateway scope it says the java package net could not be found.

How can I automate this task on a 7.9.16 gateway?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [October 19, 2020, 11:53pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818/2 "2020-10-19T23:53:34Z")

</div>

I’m not even sure how you got it working against Apache Commons Net - as far as I can tell that is not a dependency we include in 7.9.16…

Do you have any 3rd party modules installed maybe?

---

<div class="post-metadata">

**Author:** ![Jonathan](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@Jonathan](https://forum.inductiveautomation.com/u/Jonathan)\
**Post date:** [October 19, 2020, 11:58pm UTC](https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818/3 "2020-10-19T23:58:19Z")

</div>

well look at that we do have a custom module we made a long time ago to import apache commons net. It looks like it should be available in the gateway scope. Any ideas why it is not working?

```auto
<?xml version="1.0" encoding="UTF-8"?>
<modules>
	<module>
		<id>ApacheCommonsNet</id>
		<name>Apache Commons Net</name>
		<description>Apache Commons Net™ library implements the client side of many basic Internet protocols. The purpose of the library is to provide fundamental protocol access, not higher-level abstractions. Therefore, some of the design violates object-oriented design principles.</description>
		<version>3.5.0</version>
		<requiredignitionversion>7.9.6</requiredignitionversion>
		<requiredframeworkversion>7</requiredframeworkversion>
		<freemodule>true</freemodule>
		<jar scope="G">FreeModuleTemplate-gateway-1.0.0.jar</jar>
		<jar scope="G">commons-net-3.5.jar</jar>
		<jar scope="CD">commons-net-3.5.jar.pack.gz</jar>
		<hook scope="G">com.inductiveautomation.ignitionsdk.FreeModuleTemplate.GatewayHook</hook>
	</module>
</modules>

```

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [October 20, 2020, 12:06am UTC](https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818/4 "2020-10-20T00:06:53Z")

</div>

Adding dependencies that you intend to use in scripts via a module only works in Client/Designer scope, where there is no ClassLoader hierarchy. It does nothing for you in gateway scope unless you also add scripting function implementations that use the library to go along with it.

You could just drop it into `$IGNITION/lib/core/gateway` and restart to make it available in gateway scope, though.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 20, 2020, 2:24am UTC](https://forum.inductiveautomation.com/t/ignition-7-9-ftp-over-tls/39818/5 "2020-10-20T02:24:16Z")

</div>

> [@Kevin.Herron](#):
>
> unless you also add scripting function implementations that use the library

In a pinch, you can supply a "script" module that just has (a) public static final field(s) that is(are) set to the class(es) you need. Like this for the report module:

> [@Report with Scripted Nested Data](http://forum.inductiveautomation.com/t/report-with-scripted-nested-data/11801/7):
>
> Hey Kathy, The problem with importing across classloaders could be mitigated by placing the following in the Java class that gets loaded to [system.report](https://docs.inductiveautomation.com/display/DOC79/system.report): public static final Class\<?\> QueryResults = com.inductiveautomation.reporting.common.api.QueryResults.class; Then anyone’s scripts could do: from system.report import QueryResults Pretty please?
