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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值