Kettle Rest大文件上传(RestUploadFile.ktr) Rest文件下载(FileDownload.ktr)
1. Rest大文件上传(RestUploadFile.ktr)
需求描述
- 上传文件大于10M小于500M
- 上传文件进行分片(5M一片要比1M分片整体时间快)
- 先使用java类进行功能模拟在迁移Ktr
- 使用Kettle+Java片段代码开发
- 启动步骤时可以自定义必须参数
- 增加UserId(如:testXiaoYu目录)
- 上传地址:http://**:8089/api/dlapiservice/v1/file/userdata
- 下载地址:http://**:8089/api/dlapiservice/v1/file/userdata/
- HDFS地址:http://**:50070/explorer.html#/testXiaoYu(需要查看需要92服务器远程到153服务器查看)
截图步骤说明
指定大文件上传
片段代码
运行成功结果
上传片段代码
- import java.io.*;
- import org.apache.http.HttpResponse;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.mime.HttpMultipartMode;
- import org.apache.http.entity.mime.MultipartEntityBuilder;
- import org.apache.http.impl.client.HttpClients;
- public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
- Object[] r = getRow();
- if (r == null) {
- setOutputDone();
- return false;
- }
- r = createOutputRow(r, data.outputRowMeta.size());
- String urlString = get(Fields.In, "url").getString(r);
- String filename = get(Fields.In, "filename").getString(r);
- String filepath = get(Fields.In, "filepath").getString(r);
- // String action = get(Fields.In, "action").getString(r);
- String userId = get(Fields.In, "userid").getString(r);
- int partsize = 1024 * 1024 * 5;
- File file = new File(filename);
- HttpClient httpClient = HttpClients.createDefault();
- HttpPost post = new HttpPost(urlString);
- MultipartEntityBuilder entity = MultipartEntityBuilder.create();
- entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
- entity.addTextBody("filepath", filepath);
- entity.addTextBody("userId", userId);
- try {
- //Make HTTP Call
- if (file == null || file.getAbsolutePath() == null) {
- get(Fields.Out, "http_status").setValue(r,"失败");
- } else {
- long filelenght = file.length();
- if (filelenght <= partsize) {
- entity.addBinaryBody("file", file);
- entity.addTextBody("action", "create");
- post = new HttpPost(urlString);
- post.setEntity(entity.build());
- HttpResponse response = httpClient.execute(post);
- //设置返回值
- String httpStatusCode = String.valueOf(response.getStatusLine().getStatusCode());
- // System.out.println("****上传完成*************:" + httpStatusCode + "------result:" + result);
- if(httpStatusCode.equals("200")||httpStatusCode.equals("201"))
- {
- get(Fields.Out, "http_status").setValue(r,"成功");
- }
- else
- {
- get(Fields.Out, "http_status").setValue(r,"失败");
- }
- }else {
- int endPosition = 0;//子文件结束位置
- int count = (filelenght % partsize != 0) ? (int) (filelenght / partsize + 1) : (int) (filelenght / partsize);
- try {
- FileInputStream fileInputStream = new FileInputStream(file);
- int byteslength = 0;
- byte[] tempbytes = new byte[partsize];
- byte[] array = null;
- int i = 1;
- while ((byteslength = fileInputStream.read(tempbytes)) != -1) {
- endPosition += partsize;
- endPosition = (endPosition > filelenght) ? (int) filelenght : endPosition;
- array = new byte[byteslength];
- //System.arraycopy(tempbytes, 0, array, 0, byteslength);
- entity = MultipartEntityBuilder.create();
- if (endPosition == partsize) {
- entity.addTextBody("action", "create");
- } else {
- entity.addTextBody("action", "append");
- }
- entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
- entity.addTextBody("filepath", filepath);
- entity.addTextBody("userId", userId);
- File tempfile = new File(String.valueOf(0));
- FileOutputStream temfileStream = new FileOutputStream(tempfile);
- temfileStream.write(array);
- entity.addBinaryBody("file", tempfile);
- post = new HttpPost(urlString);
- post.setEntity(entity.build());
- temfileStream.close();
- httpClient = HttpClients.createDefault();
- HttpResponse response = httpClient.execute(post);
- //设置返回值
- String httpStatusCode = String.valueOf(response.getStatusLine().getStatusCode());
- get(Fields.Out, "http_statuscode").setValue(r, httpStatusCode);
- if (httpStatusCode.equals("200") || httpStatusCode.equals("201")) {
- get(Fields.Out, "http_status").setValue(r,"成功");
- } else {
- get(Fields.Out, "http_status").setValue(r,"失败");
- break;
- }
- i++;
- }
- }catch (Exception e) {
- get(Fields.Out, "http_statuscode").setValue(r, -1);
- get(Fields.Out, "http_status").setValue(r, "失败:"+e.getMessage());
- }
- }
- }
- } catch (Exception e) {
- //System.out.println("==================" + e.getMessage());
- // Set value of HTTP Status to -1 since HTTP Post caused exception
- get(Fields.Out, "http_statuscode").setValue(r, -1);
- get(Fields.Out, "http_status").setValue(r, "失败:"+e.getMessage());
- } finally {
- }
- // get(Fields.Out, "http_statuscode").setValue(r, -1);
- // get(Fields.Out, "http_status").setValue(r, "失败");
- // Send the row on to the next step.
- putRow(data.outputRowMeta, r);
- return true;
- }
2. Rest文件下载(FileDownload.ktr)
需求描述
- 下载上传的文件
- (5M一片要比1M分片整体时间快)
- 下载地址:http://**:8089/api/dlapiservice/v1/file/userdata/
- HDFS地址:http:// **:50070/explorer.html#/testXiaoYu(需要查看需要92服务器远程到153服务器查看)
下载片段代码
- import org.apache.http.*;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.utils.URIBuilder;
- import org.apache.http.impl.client.HttpClients;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URISyntaxException;
- public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
- Object[] r = getRow();
- if (r == null) {
- setOutputDone();
- return false;
- }
- r = createOutputRow(r, data.outputRowMeta.size());
- String urlString = get(Fields.In, "url").getString(r);
- String filepath = get(Fields.In, "filepath").getString(r);
- String folder = get(Fields.In, "folder").getString(r);
- String filename ="";
- String userId = get(Fields.In, "userid").getString(r);
- HttpClient httpClient = HttpClients.createDefault();
- try {
- URIBuilder builder = new URIBuilder(urlString+"/" + userId);
- builder.addParameter("filepath", filepath);
- HttpGet httpGet = new HttpGet(builder.build());
- HttpResponse response = httpClient.execute(httpGet);
- HttpEntity entity = response.getEntity();
- InputStream is = entity.getContent();
- filename = getFileName(response);
- //System.out.println("-----filename--------:" + filename);
- File file = new File(folder + filename);
- file.getParentFile().mkdirs();
- FileOutputStream fileout = new FileOutputStream(file);
- byte[] buffer = new byte[1024 * 1024];
- int ch = 0;
- while ((ch = is.read(buffer)) != -1) {
- fileout.write(buffer, 0, ch);
- }
- is.close();
- fileout.flush();
- fileout.close();
- get(Fields.Out, "filename").setValue(r,filename);
- get(Fields.Out, "http_status").setValue(r, "成功");
- } catch (URISyntaxException e) {
- //e.printStackTrace();
- get(Fields.Out, "exception").setValue(r, "失败:"+e.getMessage());
- } catch (ClientProtocolException e) {
- //e.printStackTrace();
- get(Fields.Out, "exception").setValue(r, "失败:"+e.getMessage());
- } catch (IOException e) {
- //e.printStackTrace();
- get(Fields.Out, "exception").setValue(r, "失败:"+e.getMessage());
- }
- // Send the row on to the next step.
- putRow(data.outputRowMeta, r);
- return true;
- }
- public static String getFileName(HttpResponse response) {
- Header contentHeader = response.getFirstHeader("Content-Disposition");
- String filename = null;
- if (contentHeader != null) {
- HeaderElement[] values = contentHeader.getElements();
- if (values.length == 1) {
- NameValuePair param = values[0].getParameterByName("filename");
- if (param != null) {
- try {
- filename = param.getValue();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- return filename;
- }
- KettleDemo整体原型前提条件,Java片段代码需要引用Jar包下载路径: http://hc.apache.org/downloads.cgi
- Jar包拷贝
Kettle Rest大文件上传(RestUploadFile.ktr) Rest文件下载(FileDownload.ktr)的更多相关文章
- 解决PHP大文件上传问题
PHP大文件上传问题 今天负责创业计划大赛的老师问我作品上报系统上传不了大文件,我当时纳闷了,做的时候没限制上传文件的大小阿,怎么会传不了呢,自己亲自体验了番,果然不 行,想了好一会儿才有点眉目 ...
- 使用commons-fileupload包进行大文件上传注意事项
项目中使用 commons-fileupload-1.2.1.jar 进行大文件上传. 测试了一把,效果很不错. 总结如下: 必须设置好上传文件的最大阀值 final long MAX_SIZE = ...
- 因用了NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误的解决方法
今天遇到一个问题,就是“NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误”,百度后发现了一个解决方法,跟大家分享下: NeatUploa ...
- ASP.NET 大文件上传的简单处理
在 ASP.NET 开发的过程中,文件上传往往使用自带的 FileUpload 控件,可是用过的人都知道,这个控件的局限性十分大,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的 ...
- 【原创】用JAVA实现大文件上传及显示进度信息
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...
- BootStrap Progressbar 实现大文件上传的进度条
1.首先实现大文件上传,如果是几兆或者几十兆的文件就用基本的上传方式就可以了,但是如果是大文件上传的话最好是用分片上传的方式.我这里主要是使用在客户端进行分片读取到服务器段,然后保存,到了服务器段读取 ...
- 使用NeatUpload控件实现ASP.NET大文件上传
使用NeatUpload控件实现ASP.NET大文件上传 一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不 ...
- Asp.net mvc 大文件上传 断点续传
Asp.net mvc 大文件上传 断点续传 进度条 概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这 ...
- 百万行mysql数据库优化和10G大文件上传方案
百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...
随机推荐
- Dom4j 操作文件,文件相对路径的问题
System.out.println("xml路径:"+ServletActionContext.getServletContext().getRealPath("/zx ...
- 非旋treap套线段树
BZOJ3065. 去年用pascal 块链过了.. 今年来试了试非旋treap大法 注定被块链完爆 代码留这. 第一份 :辣鸡的 垃圾回收做法 跑得极慢 #include <bits/ ...
- bzoj2957楼房重建——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树维护原点到楼顶的斜率,可以知道答案就是从原点开始斜率递增的个数: 记录一个mx数 ...
- bzoj4540
莫队+st表 据说这是经典问题,但是我不会... 问题在于莫队怎么算贡献,每次移动一个位置,现在为[l,r],那么就增加了[l-1,r),r的贡献,怎么算呢?我们预处理fl,fr,fl[i]表示以i为 ...
- Java字符串理解
1. 字符串基本知识 用java.lang.String类的对象表示字符串 字符串类型不是基本类型, 而是引用类型(类似于数组和对象) Java基于Unicode字符集 2. 字符串创建 public ...
- Numpy学习笔记<1>
1 numpy的ndarray:一种多维数组 a:创建ndarry 注意:np.array会尝试为新建的数组一个合适的数据类型 保存在dtype中 b:嵌套序列转换为一个多维数组 c:输出数据类型 ...
- 程序兵法:Java String 源码的排序算法(一)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...
- C#中的explicit和implicit了解一下吧
今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);.貌似很久没用过这种隐式转换的写法了,因此重新温习一 ...
- HDU-2602 Bone Collector——01背包
首先输入一个数字代表有n个样例 接下来的三行 第一行输入n 和 v,代表n块骨头,背包体积容量为v. 第二行输入n块骨头的价值 第三行输入n块骨头的体积 问可获得最大的价值为多少 核心:关键在于d ...
- 如何有效提升Unity Gear VR游戏性能
http://www.vr186.com/vr_news/vr_technical_area/1093.html 好的,所以你决定用 Unity 来做一个 VR 游戏,并选定了三星 Gear vr 为 ...