【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来传输文件相关推荐

  1. java 读excel 流_Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案...

    原文:https://www.cnblogs.com/cksvsaaa/p/7280261.html 注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经 ...

  2. java的dao层_Java中DAO层、Service层和Controller层的区别

    DAO层: DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封 ...

  3. java服务和net服务_艾伟_转载:Java和.NET互操作:我们应该放弃Web Service吗?

    通过Web Service混合.NET和Java技术往往很容易,但Web Service并 非是.NET和Java互操作的万灵丹.Web Service在集成独立的跨网络通信的组件时非常有用,在简单的 ...

  4. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...

    org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...

  5. java文件选择器_java中文件选择器JFileChooser的用法

    一般的说,大家用JFileChooser有两种用法:打开文件或文件夹.保存文件或文件夹.本文就打开和保存文件来介绍JFileChooser的用法. 头文件的声明: import javax.swing ...

  6. java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹

    package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...

  7. java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件

    获取文件的绝对路径,读取该文件 一.文件目录打印图 下面的文件目录图,是项目中文件的位置信息:下面的例子是按照这个图来演示的. . |-- java | |-- ibard | | |-- demo1 ...

  8. java资源文件路径_Java 中获取资源(文件)的路径问题总结

    Java 中获取资源(文件)的路径问题总结 首先,Java 中获取资源大体上可分为两种方式,基于 文件系统的 和 基于classpath的. 1. 基于文件系统的相对简单. 比如 构造一个File f ...

  9. java 读文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public cla ...

最新文章

  1. Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言)
  2. ExtJS之 标准布局类(针对于panel)
  3. Pycharm使用详解
  4. mysql中systimestamp_oracle数据库中timestamp是什么数据类型
  5. Python如何防止sql注入
  6. 代写python代码一般多少钱_代写CO 353课程作业、代做Python程序设计作业、代写Python语言作业...
  7. 开启防火墙web服务器访问权限 开启必要端口共外部使用
  8. linux服务器定时关机重启,Ubuntu Server 10.10 每天定时开关机linux服务器应用 -电脑资料...
  9. LeetCode 10 Regular Expression Matching(字符串匹配)
  10. React Ant Design UI 图片上传组件 代码片段
  11. vivo人工智能推荐算法岗提前批面试
  12. 人人开源(快速搭建项目)
  13. oracle 拼音首字母查询,用Oracle的NLSSORT获取拼音首字母
  14. 数据平台作业调度系统详解-实践篇
  15. BFM(Bus Functional Model )--总线功能模型
  16. 弘辽科技:淘宝补单补多久流量提升?有什么方法?
  17. Fiddler爬取抓包(网页及小程序包)
  18. 【牛羊饲喂技术】牛羊育肥能不能喂猪料?蓉宝生物有说道
  19. 最快捷有效的Au贴唱流程攻略
  20. PMBOK(第五版)学习笔记 —— ITTO(输入、工具与技术及输出)汇总

热门文章

  1. 对象过滤某个属性 循环 php_37道PHP面试题(附答案)
  2. python map函数的作用_Python的map函数
  3. Java实现动态加载页面_[Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新)...
  4. Bean放入Spring容器,你知道几种方式?
  5. Redis笔记之基本数据结构 链表
  6. 简易的遍历文件加密解密
  7. haskell程序设计语言
  8. mysql tomcat列表增删改查_Tomcat-Database
  9. python3.6.8卸载_CentOS7下安装python3.6.8的教程详解
  10. 计算机教育应用3t模式,开题报告样例--初中语文说明文阅读教学整合模式研究.doc...