本文实例为大家分享了Java服务器处理图片上传的具体代码,供大家参考,具体内容如下
一、简述
第一:浏览器上传图片实现;
第二:微信小程序上传图片实现;
二、图片上传功能实现
1.处理H5的单文件上传实现:
package cn.ncist.tms.attachment.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@RequestMapping(value = "/fileUpload")
@Controller
public class AttachmentUpload {
@RequestMapping(value = "/doFileUpload",method = RequestMethod.POST)
@ResponseBody
public Map<String,Object> doFileUpload(HttpServletRequest request,
HttpServletResponse reponse,
@RequestParam("file") MultipartFile srcFile) throws IOException{
//1.变量声明
Map<String,Object> result = null;// 返回结果变量
FileOutputStream fos = null; //写入文件的变量
File destFile = null; //写入的目的地文件(distination)
try {
result = new HashMap<String,Object>();
//2.参数验证
if(srcFile == null){
throw new RuntimeException("上传文件不存在");
}
if(srcFile.getBytes().length == 0){
throw new RuntimeException("上传文件内容为空");
}
//3.操作文件对象,写入本地目录的文件中
//3.1 截取文件后缀
String ext = srcFile.getOriginalFilename().substring(srcFile.getContentType().lastIndexOf( ".")+1);
//3.2 实例化目标文件,根据当前的操作系统,指定目录文件,
destFile = new File("D:"+File.separator+"descFolder"+File.separator+"descFile."+ext);
//3.3 实例化流
fos = new FileOutputStream(destFile);
//3.4 获取写入的字节数组,并写入文件
byte[] srcBytes = srcFile.getBytes();
fos.write(srcBytes);
fos.flush();
//4.对输入、输出流进行统一管理
//已在文件finally代码块处理
result.put( "code", "S");
result.put( "msg", "服务调用成功");
result.put( "path", destFile.getAbsolutePath());
return result;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
result = new HashMap<String,Object>();
result.put( "code", "F");
result.put( "msg", "服务调用失败");
result.put( "path", null);
return result;
} finally{
//关闭系统资源,避免占用资源.
if(fos != null){
fos.close();
}
}
}
}
2.微信或手机APP上传图片文件的代码实现:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.hlinkcloud.ubp.core.constant.RedisKeyConstant;
import com.hlinkcloud.ubp.core.service.RedisService;
import com.hlinkcloud.ubp.core.util.BaseStringUtil;
import com.hlinkcloud.ubp.facade.bean.common.FastDFSFile;
import com.hlinkcloud.ubp.facade.bean.common.FileManagerConfig;
import com.hlinkcloud.ubp.facade.service.common.FileInfoService;
import com.hlinkcloud.ubp.facade.service.permission.UserService;
import com.hlinkcloud.ubp.facade.util.DictionaryCommUtil;
import fr.opensagres.xdocreport.core.io.internal.ByteArrayOutputStream;
@Controller
@RequestMapping("/wx_upload")
public class WxUploadImgBusiness {
@Resource
private UserService userService;
@Resource
private RedisService redisService;
@Resource(name = "commonUtil")
private DictionaryCommUtil commUtil;
@Resource
private FileInfoService fileService;
@RequestMapping("/getUploadFilePath")
@ResponseBody
public Map<String, Object> doWxUploadFile(HttpServletRequest request, HttpServletResponse response) {
HashMap<String, Object> map = new HashMap<String, Object>();
try {
// 1.将请求转化为操作流的请求对象.
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
MultipartFile picture = req.getFile("file");
if(picture != null && picture.getBytes().length != 0){
// 2.将图片上传到服务器
byte[] bytes = picture.getBytes();
String ext = picture.getOriginalFilename().substring(
picture.getOriginalFilename().lastIndexOf(".") + 1
);
// (备注:下列代码为内部业务代码,可根据公司自身的需求,进行更改)
map.put("code", "S");
map.put( "msg", "服务调用成功");
map.put("statusCode", 200);
map.put("data", filePath);
}else{
throw new RuntimeException("上传图片异常或空图片!");
}
} catch (IOException e) {
e.printStackTrace();
map.put("code", "F");
map.put("msg", "服务调用失败");
map.put("statusCode", 500);
map.put("data", null);
}
return map;
}
@RequestMapping(value = "/doUploadFileOfCI" , method = RequestMethod.POST )
public @ResponseBody Map<String,Object> doUploadFile(
HttpServletRequest request,//请求对象
HttpServletResponse response) throws IOException{//响应对象
System.out.println("doTestMultipartFile:");
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
//此时说明请求对象是MultipartHttpServletRequest对象
MultipartFile picture = req.getFile("UploadedImage");
//遍历请求得到所有的数据.
if(req != null){
//获取所有属性名
Enumeration enume= req.getAttributeNames();
while(enume.hasMoreElements()){
System.out.println("enume:"+enume.nextElement());
}
//获取所有文件名
Iterator<String> fileNames = req.getFileNames();
while(fileNames.hasNext()){
System.out.println("fileNames:"+fileNames.next());
}
//获取操作文件的map
Map<String,MultipartFile> fileMap = req.getFileMap();
if(fileMap != null && fileMap.size() > 0){
Set<String> set = fileMap.keySet();
for(String key:set){
System.out.println("String:"+key);
}
}
//获取请求流
InputStream is = req.getInputStream();
System.out.println("InputStream:"+is);
int length = -1;
while( (length = is.read()) != -1 ){
System.err.println("data:"+length);
}
//获取所有请求参数
Enumeration enumee = req.getParameterNames();
while(enumee.hasMoreElements()){
System.out.println("enumee:"+enumee.nextElement());
}
}
System.out.println(picture);
return null;
}
}
总结:图片上传均是将图片的字节数据,以HTTP协议(其他编程语言自行定义传输协议) 进行数据的传输,当服务器接收到后,解析HTTP协议的图片数据并封装成Request请求对象,最后通过请求对象便可获取封装好的文件对象。(注:当项目配置SpringMVC的文件上传解析器后,可以在请求方法的参数中传入Multipart类型变量或解析Request对象。)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。