一.Rest接口:
package com.zjtachao.wcad.dsp.cs.rest.resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.apache.commons.io.FileUtils;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
import com.zjtachao.framework.common.util.json.JsonObject.ResultCode;
import com.zjtachao.framework.common.util.rest.RestContents;
import com.zjtachao.framework.common.util.tools.UploadFileUtil;
import com.zjtachao.framework.pojo.rest.RestObject;
import com.zjtachao.wcad.dsp.cs.pojo.ro.DspCsMaterialImgRo;
import com.zjtachao.wcad.dsp.cs.rest.resource.base.BaseResource;
import com.zjtachao.wcad.dsp.cs.util.constants.DspCsCommonConstants;
import com.zjtachao.wcad.dsp.cs.util.tools.DspCsValidateUtil;
@Path("/upload")
public class DspAdUploadResourceImpl extends BaseResource {
/**
* 使用普通的流的形式上传:调用UploadFileUtil.uploadImage
* @param filename
* @param uploadedInputStream
* @param fileDetail
* @return
*/
@POST
@Path("/file")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(RestContents.MEDIA_TYPE_APPLICATION_JSON_UTF8)
public RestObject<DspCsMaterialImgRo> uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,@FormDataParam("file") FormDataContentDisposition fileDetail) {
RestObject<DspCsMaterialImgRo> rest = new RestObject<DspCsMaterialImgRo>();
rest.setCode(ResultCode.VALID_NO_PASS.getCode());
try{
if((null != uploadedInputStream) && (null != fileDetail)){
String fileName = fileDetail.getFileName();
//验证格式是否正确(支持 jpg/png/gif)
if(DspCsValidateUtil.validateImgFileType(fileName)){
//获取图片本地路径
String imgPath = configUtil.getConfigByKey(DspCsCommonConstants.COM_ZJTACHAO_WCAD_MATERIAL_IMG_PATH);
//上传之后的相对路径
String filePath = UploadFileUtil.uploadImage(imgPath, uploadedInputStream, fileName);
//上传之后的URL
String headImgUrl = configUtil.getConfigByKey(DspCsCommonConstants.COM_ZJTACHAO_WCAD_MATERIAL_IMG_URL_PREFIX);
//返回物料对象
DspCsMaterialImgRo ro = new DspCsMaterialImgRo();
ro.setMaterialImgUrl(headImgUrl+filePath);
rest.setCode(ResultCode.SUCCESS.getCode());
rest.setMsg("上传成功!");
rest.setRst(ro);
}else{
rest.setMsg("上传失败!原因:图片格式只能为jpg、png、gif格式!");
}
}else{
rest.setMsg("上传失败!原因:图片数据不能为空!");
}
}catch(Exception ex){
rest.setCode(ResultCode.ERROR.getCode());
rest.setMsg("上传失败!原因:服务器出错!");
logger.error("上传物料失败!",ex);
}
return rest;
}
/**
* 使用FileUtils.copyInputStreamToFile方式上传
*
* @param fileInputStream
* @param disposition
* @return
*/
@POST
@Path("uploadimage1 ")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadimage1(@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition disposition) {
String imageName = Calendar.getInstance().getTimeInMillis() + disposition.getFileName();
File file = new File(imageName);
try {
//使用common io的文件写入操作(注:需要2.2以上版本的commons-io包)
FileUtils.copyInputStreamToFile(fileInputStream, file);
//原来自己的文件写入操作
//saveFile(fileInputStream, file);
} catch (IOException ex) {
//TODO
}
return "images/" + imageName;
}
// 保存文件信息到磁盘
private void saveFile(InputStream uploadedInputStream, File file) {
try {
OutputStream outpuStream = new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[1024];
//outpuStream = new FileOutputStream(new File(serverLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
outpuStream.write(bytes, 0, read);
}
outpuStream.flush();
outpuStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:若使用FileUtils.copyInputStreamToFile方式,需要2.2以上版本的commons-io包
如下:
<!-- Apache Commons -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
二.UploadFileUtil文件上传工具类:
package com.zjtachao.framework.common.util.tools;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
/**
* 上传文件工具类
*/
public class UploadFileUtil {
/**
* 上传图片的方法
* @param imageFile
* @param imageName
* @return
* @throws IOException
*/
public static String uploadImage(String path, File imageFile, String imageName) throws IOException {
/*创建输入流*/
InputStream is = new FileInputStream(imageFile);
return uploadImage(path, is, imageName);
}
/**
*
* 上传图片的方法
* @param path
* @param inputStream
* @param imageName
* @return
* @throws IOException
*/
public static String uploadImage(String path, InputStream inputStream, String imageName) throws IOException {
int random = (int)(Math.random()*900)+100;
/*设置上传目录*/
Calendar cal=Calendar.getInstance();
String month = String.valueOf(cal.get(Calendar.MONTH)+1);
month = month.length() == 1 ? "0" + month : month;
String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
day = day.length() == 1 ? "0" + day : day;
String imageUrlPath = "images" + "/" + cal.get(Calendar.YEAR) + "/" + month + "/" + day;
String imagePath = path + imageUrlPath;
File file = new File(imagePath);
if (!file.exists()) {
file.mkdirs();
}
/*设置目标文件*/
String targetImageName = "" + cal.get(Calendar.HOUR) + cal.get(Calendar.MINUTE) + cal.get(Calendar.SECOND)
+ cal.get(Calendar.MILLISECOND) + random + imageName.substring(imageName.lastIndexOf("."));
File target = new File(imagePath + "/" + targetImageName);
/*创建输出流*/
OutputStream os = new FileOutputStream(target);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = inputStream.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
inputStream.close();
os.close();
return "/" + imageUrlPath + "/" + targetImageName;
}
}
三.DspValidateUtil验证工具类:
/**
*
* 验证图片类型
* @param fileName
* @return
*/
public static boolean validateImgFileType(String fileName){
boolean flag = false;
if((null != fileName) && (!"".equals(fileName))){
int index = fileName.lastIndexOf(".");
if(index > 0){
String type = fileName.substring(index+1);
if((null != type) &&
(type.equalsIgnoreCase("jpg")
|| type.equalsIgnoreCase("png")
|| type.equalsIgnoreCase("gif"))){
flag = true;
}
}
}
return flag;
}
三.Form表单:
<form id="form" enctype="multipart/form-data" method="post" action="${base}/news/addImage">
<div>
<div id="imageDiv">
<input id="image" name="file" title="上传图片" type="file" multiple accept="image/*" onchange="handleFiles(this)">
<input type="button" value="删除" onclick="deleteImage()"/>
</div>
<div id="previewImage" align="center"></div>
</div>
<input type="button" value="保存" class="btn btn-large btn-danger" onclick="doSubmit()"/>
<input id="size" type="hidden"/>
</form>
四.普通上传——form表单提交方式:
function doSubmit(){
var size = $("#size").val();
if(size > 104857600){
$("#msg").text("上传的图片尺寸过大");
return;
}
$("#form").submit();
}
五.Ajax上传:
function upload(obj) {
var formData = new FormData($("#form")[0]);
$.ajax({
url: "http://192.168.1.1/webapp/rest/upload/image",
type: "POST",
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (data) {
//预览
previewImage(obj);
}
});
}
六.预览:
function handleFiles(obj) {
var files = obj.files;
var size = files[0].size;
$("#size").val(size);
img = new Image();
if(window.URL){
img.src = window.URL.createObjectURL(files[0]);
img.onload = function(e) {
window.URL.revokeObjectURL(this.src);
}
$("#previewImage").append(img);
}else if(window.FileReader){
var reader = new FileReader();
reader.readAsDataURL(files[0]);
reader.onload = function(e){
img.src = this.result;
$("#previewImage").append(img);
}
}else{
obj.select();
obj.blur();
var nfile = document.selection.createRange().text;
document.selection.empty();
img.src = nfile;
img.onload=function(){
}
$("#previewImage").append(img);
}
}
参考:
jersey 文件上传-使用两种不同的方式
jQuery异步上传文件
分享到:
相关推荐
【标题】:“jersey webapp ajax demo”是一个展示如何在Java Web应用中使用Jersey框架与Ajax技术进行交互的示例项目。这个项目是通过Maven构建系统来管理依赖和构建流程的,使得开发者能够快速地搭建和测试RESTful...
在本教程中,我们将深入探讨如何使用Spring Boot与Jersey实现跨域文件上传。Spring Boot以其简化Spring应用程序开发的特性而受到广泛欢迎,而Jersey是JAX-RS规范的一个实现,用于构建RESTful Web服务。当我们谈论...
通过以上步骤,我们可以有效地解决文件上传过程中可能出现的乱码问题。在实际开发中,还需要考虑其他因素,比如错误处理、文件大小限制等,以确保服务的稳定性和安全性。同时,利用Maven管理项目依赖和构建流程,...
在这个场景中,我们将探讨如何在Spring MVC中利用Jersey Client实现远程文件上传功能。 首先,我们需要理解Spring MVC的文件上传机制。Spring MVC提供了`MultipartFile`接口,用于处理HTTP请求中的多部分数据,包括...
在使用Jersey处理文件上传时,你可以选择使用内置的`MultiPartFeature`,也可以通过自定义`MessageBodyReader`实现更灵活的控制。无论哪种方式,关键在于理解和利用Jersey提供的API来处理HTTP请求的多部分数据。在...
在文件上传中,Spring MVC可以解析上传请求,将文件内容绑定到模型对象上,然后调用相应的服务进行处理。 4. **文件上传流程**: - 客户端通过HTTP POST请求发送文件。 - Spring MVC的Controller接收到请求,解析...
在本实例中,文件上传功能可能使用了Jersey的Multipart support,基于`@FormDataParam`注解来接收上传的文件。这个功能涉及到以下几点: 1. **MIME类型**:文件上传需要识别和处理不同类型的文件,这通常通过MIME...
本文将深入探讨如何使用Jersey处理文件上传和下载,这在许多应用场景中,如云存储、文件共享服务等,都是至关重要的功能。 首先,我们需要了解REST(Representational State Transfer)的核心概念,它是一种架构...
标题 "jersey上传文件代码" 涉及到的是使用Jersey框架进行文件上传的编程实践。Jersey是Java RESTful Web服务(JAX-RS)的实现,它允许开发者创建和消费RESTful API。在描述中提到,这部分的知识点可能来自于英文...
4. **配置 Jersey**:在 `web.xml` 文件中配置 Jersey 作为 Servlet 处理器。添加如下内容: ```xml <servlet-name>Jersey Web Application <servlet-class>org.glassfish.jersey.servlet.ServletContainer ...
例如,可以通过MultipartFile的isEmpty()方法检查文件是否为空,通过contentType属性判断文件类型,以及在保存前进行文件大小的验证。 总的来说,SpringBoot和Jersey结合使用,可以快速构建出功能丰富的RESTful服务...
在Spring MVC中,可以使用jersey-client来创建一个客户端代理,与远程服务器进行通信,实现文件的上传功能。 在实现跨服务器文件上传时,首先需要配置jersey-client,设置目标服务器的URL、HTTP方法(通常是POST)...
本篇将详细介绍如何使用Jersey框架实现RESTful服务,以及如何通过CXF客户端进行调用,并探讨jQuery AJAX如何与这些服务进行交互。 1. **Jersey与RESTful服务** Jersey是Java平台上的一个开源项目,它是JAX-RS...
在开发Web应用时,文件上传是一项常见的功能,特别是在分布式系统中,跨服务器文件上传尤为重要。本文将详细讲解如何使用SpringMVC与Jersey框架来实现这一功能。 首先,要实现跨服务器文件上传,我们需要在...
要实现在Spring和Jersey中进行文件下载,我们需要以下步骤: 1. **配置Spring和Jersey**: - 引入jersey-spring3依赖,确保Spring容器能够管理Jersey的组件。 - 配置JerseyServlet,通常在web.xml中定义一个...
下载文件: 运行jersey-server, 不设置端口的情况下,默认为8080,springboot jar运行方式下默认端口为9000 ...文件路径分割符号请用/替代\...上传下载文件大小在工程jersey-server的配置文件application.properties里设置
5. **jersey-media-multipart**: 支持MIME多部分类型的数据传输,例如上传文件。 6. **jersey-guava**: 引入Google Guava库,提供了一些实用工具类和集合类,增强Jersey的功能。 7. **jersey-hk2**: 依赖于HK2...
8. **jersey-media-multipart**:支持文件上传和下载的多部分/表单数据处理。 9. **jersey-common**:通用工具和功能,如注入、类型转换等。 10. 其他可能的依赖库,如JSR-311规范实现、Apache HttpClient等。 总的...
总的来说,使用Jersey处理POST请求中的表单数据并实现下载功能涉及以下几个关键点:使用`@FormParam`获取参数,通过`StreamingOutput`提供文件内容,以及设置正确的HTTP响应头。理解这些概念和实践将有助于你在构建...