FME从远程服务器下载文件

一、前言

从远程服务器下载文件其实主要用的是网络传输协议。比如我有一个远程文件url路径:http://172.30.252.233:6688/文件下载/CAD数据/茨林.dwg,最简单的方式就是在浏览器中打开这个网址,然后就会自动下载,因为浏览器就是支持HTTP协议的。
但是如果我们有多个文件需要下载呢,一个个复制到浏览器内下载就显得效率太低了,这个时候我们就可以使用FME的PythonCaller和HTTPCaller这两个转换器。两者的本质都是一样,使用HTTP传输协议下载文件。

二、中文编码的问题

使用前需要注意的是,url中的中文部分是需要重新编码的,否则会报编码错误。但是网址域名部分是不需要重新编码的,所以我们需要将两者分开。
针对中文编码错误的问题,我们使用TextEncoder转换器,将中文内容转换成百分比编码的内容。
如果URL中的前缀部分,或者说当整个URL都不包含中文字符的时候,可以不用编码转换。

2.1 TextEncoder转换器

如有我们有一个远程文件URL包含中文,比如:
URL:http://172.30.233:6688/文件下载/CAD数据/茨林.dwg
我们想将其下载到我的电脑的本地路径:E:\download\file\茨林.dwg
则我们需要创建以下字段:

prefix_urlchinese_urldownload_url
http://172.30.233:6688/文件下载/CAD数据/茨林.dwgE:\\download\\file\\茨林.dwg

使用TextEncoder转换器将chinese_url转换成百分比编码,输出字段为encoded_url,转换器设置如下:
TextEncoder参数

将URL中的中文部分转换编码后,使用AttributeCreater转换器将其和URL前缀部分连接起来。本例就是将prefix_url和encoded_url连接起来,输出新的字段get_url。转换器配置如下:
AttributeCreator参数

三、PythonCaller转换器

PythonCaller转换器可以在使得FME可以调用Python脚本和各类Python库,这两大数据处理工具的结合大大提升了数据处理的效率。因为在Python中,使用urllib.urlretrieve(url, filenmae = none,…)函数就可以将远程服务器上的文件下载到本地。其中url参数填写远程文件的地址,filename参数填写本地保存路径的地址。
PythonCaller转换器内的代码如下:

import fme
import fmeobjects
import urllib
def processFeature(feature):
    pass

class FeatureProcessor(object):
    def __init__(self):
        pass
    def input(self,feature):
        soururl = feature.getAttribute('geturl')		#获取远程文件路径
        desturl = feature.getAttribute('downloadpath')  #本地文件的路径
        filename = urllib.urlretrieve(soururl, desturl)	#调用urlretrieve方法下载文件
        self.pyoutput(feature)
    def close(self):
        pass

四、HTTPCaller转换器

HTTPCaller转换器的原理和在PythonCaller转换器中调用urllib是一样的,只不过HTTPCaller是功能封装号,填入参数即可;而PythonCaller是通过代码实现,代码自由度高一些。HTTPCaller还可以用来获取网页内容,做一些爬虫之类的,只不过在这里用来下载文件。本文标出使用HTTPCaller转换器下载文件所需要使用到的4个参数,如下。
HTTPCaller参数

五、工作流汇总

最后形成的工作流很简单,如下图所示。因为不用输出文件,所以也没有写模块。好像File Copy写模块也可以实现从远程服务器上下载文件,但是博主并没有实现,会的人可以指教一下,博主很乐于学习。
最后偷偷安利一下我的个人博客,虽然没什么人看:蓝线白框
fmeworkflow

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值