java restful文件传输_java中使用restful web service来传输文件
【1】上传大文件:
前端页面:
1)同步上传:
2)异步上传:
异步上传文件
上传文件:
function doUpload() {
// var formData = new FormData($("#uploadForm")[0]);
var formData = new FormData()
formData.append("targetFile",$("#sendfile"));
formData.append("userName","test-username");
$.ajax({
url: 'http://localhost:8081/webProject/api/file/uploadFile' ,
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
dataType:'json',
success: function (data) {
alert(data);
}
});
}
后端:
web.xml
CXFServlet
org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/api/*
Spring配置文件:
接口:
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
@Path("")
public interface ApiFileProcessService {
[@POST](https://my.oschina.net/u/210428)
@Path("/uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadFile(@Multipart(value="targetFile")Attachment targetFile, @Multipart(value="userName")String userName);
}
实现:
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import javax.activation.DataHandler;
public class ApiFileProcessServiceImpl implements ApiFileProcessService {
@Override
public String uploadFile(Attachment targetFile, String userName) {
try {
DataHandler dataHandler = targetFile.getDataHandler();
String originalFileName = new String(dataHandler.getName().getBytes("ISO8859-1"),"UTF-8");
InputStream is = dataHandler.getInputStream();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String saveLocation = "D:\\" + df.format(new Date()) + "_" + originalFileName;
OutputStream out = new FileOutputStream(new File(saveLocation));
int read = 0;
byte[] bytes = new byte[4096];
while ((read = is.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
}
测试结果:可以轻松处理(上传)1G以上的文件。
【2】上传小文件:
前端页面:
后端:
接口:
import javax.ws.rs.core.Context;
@Path("")
public interface ApiFileProcessService {
@POST
@Path("/uploadCommonFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadCommonFile(@Context HttpServletRequest request);
}
实现:
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class ApiFileProcessServiceImpl implements ApiFileProcessService {
@Override
public String uploadCommonFile(HttpServletRequest request) {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(factory);
List items = fileUpload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String originalFileName = item.getName();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String saveLocation = "D:\\" + df.format(new Date()) + "_" + originalFileName;
File picFile = new File(saveLocation);
item.write(picFile);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
}
注意:此方法仅适合上传小文件。
【3】下载文件
case1:
接口:
import javax.ws.rs.GET;
import javax.ws.rs.QueryParam;
@Path("")
public interface ApiFileProcessService {
@GET
@Path("/downloadTemplate")
public Response downloadTemplate(@QueryParam("templateName")templateName );
}
实现:
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
public class ApiFileProcessServiceImpl implements ApiFileProcessService {
@Override
public Response downloadTemplate(String templateName) {
File file = null;
String fileName = null;
try {
String applicationPath = Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();
file = new File(applicationPath + "/" + templateName);
fileName = URLEncoder.encode(templateName, "UTF-8"); // 如果不进行编码,则下载下来的文件名称是乱码
} catch (Exception e) {
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=" + fileName);
return response.build();
}
}
case2:
接口:
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
@GET
@Path("/exportTest")
@Produces("application/vnd.ms-excel")
public Response exportTest(@FormParam("str") String str, @Context HttpServletResponse response);
实现:
import javax.ws.rs.core.Response;
import javax.servlet.http.HttpServletResponse;
@Override
public Response exportTest(String str, HttpServletResponse response) {
try {
ServletOutputStream outputStream = response.getOutputStream();
SXSSFWorkbook wb = new SXSSFWorkbook();
wb.setCompressTempFiles(true);
Sheet sheet = wb.createSheet("sheet0");
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("hahaha");
wb.write(outputStream);
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("中文名字.xlsx", "UTF-8"));
response.setContentType("application/vnd.ms-excel");
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
java restful文件传输_java中使用restful web service来传输文件相关推荐
- java 读excel 流_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...
原文:https://www.cnblogs.com/cksvsaaa/p/7280261.html 注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经 ...
- java的dao层_Java中DAO层、Service层和Controller层的区别
DAO层: DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封 ...
- java服务和net服务_艾伟_转载:Java和.NET互操作:我们应该放弃Web Service吗?
通过Web Service混合.NET和Java技术往往很容易,但Web Service并 非是.NET和Java互操作的万灵丹.Web Service在集成独立的跨网络通信的组件时非常有用,在简单的 ...
- Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...
org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...
- java文件选择器_java中文件选择器JFileChooser的用法
一般的说,大家用JFileChooser有两种用法:打开文件或文件夹.保存文件或文件夹.本文就打开和保存文件来介绍JFileChooser的用法. 头文件的声明: import javax.swing ...
- java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹
package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...
- java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件
获取文件的绝对路径,读取该文件 一.文件目录打印图 下面的文件目录图,是项目中文件的位置信息:下面的例子是按照这个图来演示的. . |-- java | |-- ibard | | |-- demo1 ...
- java资源文件路径_Java 中获取资源(文件)的路径问题总结
Java 中获取资源(文件)的路径问题总结 首先,Java 中获取资源大体上可分为两种方式,基于 文件系统的 和 基于classpath的. 1. 基于文件系统的相对简单. 比如 构造一个File f ...
- java 读文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结
JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public cla ...
最新文章
- Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言)
- ExtJS之 标准布局类(针对于panel)
- Pycharm使用详解
- mysql中systimestamp_oracle数据库中timestamp是什么数据类型
- Python如何防止sql注入
- 代写python代码一般多少钱_代写CO 353课程作业、代做Python程序设计作业、代写Python语言作业...
- 开启防火墙web服务器访问权限 开启必要端口共外部使用
- linux服务器定时关机重启,Ubuntu Server 10.10 每天定时开关机linux服务器应用 -电脑资料...
- LeetCode 10 Regular Expression Matching(字符串匹配)
- React Ant Design UI 图片上传组件 代码片段
- vivo人工智能推荐算法岗提前批面试
- 人人开源(快速搭建项目)
- oracle 拼音首字母查询,用Oracle的NLSSORT获取拼音首字母
- 数据平台作业调度系统详解-实践篇
- BFM(Bus Functional Model )--总线功能模型
- 弘辽科技:淘宝补单补多久流量提升?有什么方法?
- Fiddler爬取抓包(网页及小程序包)
- 【牛羊饲喂技术】牛羊育肥能不能喂猪料?蓉宝生物有说道
- 最快捷有效的Au贴唱流程攻略
- PMBOK(第五版)学习笔记 —— ITTO(输入、工具与技术及输出)汇总
热门文章
- 对象过滤某个属性 循环 php_37道PHP面试题(附答案)
- python map函数的作用_Python的map函数
- Java实现动态加载页面_[Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新)...
- Bean放入Spring容器,你知道几种方式?
- Redis笔记之基本数据结构 链表
- 简易的遍历文件加密解密
- haskell程序设计语言
- mysql tomcat列表增删改查_Tomcat-Database
- python3.6.8卸载_CentOS7下安装python3.6.8的教程详解
- 计算机教育应用3t模式,开题报告样例--初中语文说明文阅读教学整合模式研究.doc...