JAVA上传文件图片到服务器保存

这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存!


首先是页面 html的   我这是提交一个文件和类型

<div style="border: 1px solid red;">
			我是添加一张临时图片得到微信的media_id保存数据库!
			<form action="xxxxxxxxm"
				enctype="multipart/form-data" method="post">
				<div style="display: none;">
					<input type="text" value="IMAGE" name="type"/>
				</div>
				上传图片:<input type="file" name="file"
					onchange="previewImage(this, 'prvid')" multiple="multiple"><br />
				<input type="submit" value="提交" />
			</form>
			<div id="prvid">预览容器</div>
		</div>                                                    

预览图片js

		function previewImage(file, prvid) {
			/* file:file控件 
			 * prvid: 图片预览容器 
			 */
			var tip = "Expect jpg or png or gif!"; // 设定提示信息 
			var filters = {
				"jpeg" : "/9j/4",
				"gif" : "R0lGOD",
				"png" : "iVBORw"
			}
			var prvbox = document.getElementById(prvid);
			prvbox.innerHTML = "";
			if (window.FileReader) { // html5方案 
				for (var i = 0, f; f = file.files[i]; i++) {
					var fr = new FileReader();
					fr.onload = function(e) {
						var src = e.target.result;
						if (!validateImg(src)) {
							alert(tip)
						} else {
							showPrvImg(src);
						}
					}
					fr.readAsDataURL(f);
				}
			} else { // 降级处理

				if (!/\.jpg$|\.png$|\.gif$/i.test(file.value)) {
					alert(tip);
				} else {
					showPrvImg(file.value);
				}
			}

			function validateImg(data) {
				var pos = data.indexOf(",") + 1;
				for ( var e in filters) {
					if (data.indexOf(filters[e]) === pos) {
						return e;
					}
				}
				return null;
			}

			function showPrvImg(src) {
				var img = document.createElement("img");
				img.src = src;
				prvbox.appendChild(img);
			}
		}

之后就是后台得到

@RequestMapping(params = "method=addCircle")
public String addCircle(HttpServletResponse response,HttpServletRequest request) throws IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");


		String path = request.getSession().getServletContext().getRealPath(
				"/BackstageShoppingWebsite/images/addCircleimage");//保存的服务器地址


		Map<String, String> map = Upload
				.upload(request, 1024 * 1024 * 10, path);


		String file= map.get("file"); // 名称
		String image = map.get("type"); // 图像
		String newFile = map.get("newFile");// 地址

		return null;
	}



好了现在重点就是看Upload 这个类了 这个类基本是封装好了的,需要 加的东西可以自己取看看然后修改

然后这个类用的是cos.jar包

方法一:

package com.web.weixin.bean;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

import com.oreilly.servlet.multipart.FilePart;
import com.oreilly.servlet.multipart.MultipartParser;
import com.oreilly.servlet.multipart.ParamPart;
import com.oreilly.servlet.multipart.Part;


public class Upload {

	public static Map<String, String> upload(HttpServletRequest request,
			int maxSize, String path) {
		
		//以map形式保存数据 key对应保存的是获取界面上的name名称 value保存的是获取界面上的name对应的值
		Map<String, String> map = new HashMap<String, String>();
		Part part = null;
		try {
			MultipartParser mrequest = new MultipartParser(request, maxSize);
			mrequest.setEncoding("utf-8");
			//遍历所有的part组
			while ((part = mrequest.readNextPart()) != null) {
				if (part.isFile()) {  //判断是否是文件

					FilePart filepart = (FilePart) part;//转化成文件组

					String fileName = filepart.getFileName();//得到文件名

					if (fileName != null && fileName.length() > 0) {
						// 取得扩展名
						String fileExtName = fileName.substring(
								fileName.lastIndexOf(".") + 1).toLowerCase();
						// 只上传图片  //判断图片上传的格式是否符合 后缀名是否有效
						if (fileExtName.equalsIgnoreCase("jpeg")
								|| fileExtName.equalsIgnoreCase("png")||
								fileExtName.equalsIgnoreCase("jpg")
								|| fileExtName.equalsIgnoreCase("gif")
								|| fileExtName.equalsIgnoreCase("ico")
								|| fileExtName.equalsIgnoreCase("bmp")
								|| fileExtName.equalsIgnoreCase("flv")
								|| fileExtName.equalsIgnoreCase("mp4")
								|| fileExtName.equalsIgnoreCase("mp3")) {

							
							/*String newFileName = new Date().getTime() + "."+ fileExtName;//重新改文件名  文件名+扩展名 */							 
							
							String newFileName =new Date().getTime() +fileName;//不改图片名字
							
							String newPath = path + "/" + newFileName; //文件处理文件上传的路径
							File newFile = new File(newPath);
							
							filepart.writeTo(newFile);  //将文件真正写入到对应的文件夹中
							
							//filepart.getName()  得到 request 要接收的参数的名字
							
							map.put(filepart.getName(), newFileName);//把文件信息保存到map中
							map.put("newFile", newFile.toString());
						} else {
							map.put("geshi", "geshi");
							continue;
						}// 说明上传的不是图片
					} else {
 
 			     	map.put("yes","yes");
  
						continue; // 说明没有选择上传图片
					}

				} else if (part.isParam()) {  //判断是否是参数
					ParamPart paramPart = (ParamPart) part;
					map.put(paramPart.getName(), paramPart.getStringValue());

				}
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}

}

方法二: 这个是 别人写的 我这也写到这里 因为写的很好 我就记录一下 也方便大家使用

@RequestMapping(params = "method=addCircle")
public String addCircle(HttpServletResponse response,HttpServletRequest request) throws IOException {
        String urls =Var.webConfigMap.get("WXLinkUrl")+"/upload/pjimages";
        Map<String, Object> paramMap= Upload.doGet(request,response,urls);
		String file= (String)map.get("file"); // 名称
		String image = (String)map.get("type"); // 图像
		String newFile = (String)map.get("newFile");// 地址
		return null;
	}

package com.web.wxutils;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


import com.oreilly.servlet.multipart.FilePart;
import com.oreilly.servlet.multipart.MultipartParser;
import com.oreilly.servlet.multipart.ParamPart;
import com.oreilly.servlet.multipart.Part;


public class Upload {
    
	/**
	 * 上传图片
	 * 
	 * @param request
	 * @param response
	 * @param url2 文件的存放路径
	 * @return
	 * @throws ServletException
	 * @throws IOException
	 */
	@SuppressWarnings({ "static-access", "unchecked" })
	public static Map<String, Object> doGet(HttpServletRequest request, HttpServletResponse response, String url2)
			throws ServletException, IOException {


		Map<String, Object> paramMap = new HashMap<String, Object>();
		StringBuilder image = new StringBuilder();
		StringBuilder details_image = new StringBuilder();


		try {
			// 1、创建工厂类:DiskFileItemFactory
			DiskFileItemFactory facotry = new DiskFileItemFactory();


			// 2、创建核心解析类:ServletFileUpload
			ServletFileUpload upload = new ServletFileUpload(facotry);
			upload.setHeaderEncoding("UTF-8");// 解决上传的文件名乱码


			// 3、判断用户的表单提交方式是不是multipart/form-data
			boolean bb = upload.isMultipartContent(request);
			if (!bb) {
				return null;
			}
			// 4、是:解析request对象的正文内容List<FileItem>
			List<FileItem> items = upload.parseRequest(request);
			String storePath = request.getSession().getServletContext().getRealPath("/upload/pjimages");// 上传的文件的存放目录


			for (FileItem item : items) {
				if (item.isFormField()) {
					// 5、判断是否是普通表单:打印看看
					String fieldName = item.getFieldName();// 请求参数名
					String fieldValue = item.getString("UTF-8");// 请求参数值
					// System.out.println(fieldName + "=" + fieldValue);


					if (fieldName.equals("old") && !fieldValue.equals("")) {
						details_image.append(fieldValue);
						details_image.append(",");
					}
					paramMap.put(fieldName, fieldValue);
				} else {
					// 6、上传表单:得到输入流,处理上传:保存到服务器的某个目录中,保存时的文件名是啥?
					String fileName = item.getName();// 得到上传文件的名称 C:\Documents
														// and
														// Settings\shc\桌面\a.txt
														// a.txt
					// 解决用户没有选择文件上传的情况
					if (fileName == null || fileName.trim().equals("")) {
						continue;
					}


					fileName = fileName.substring(fileName.lastIndexOf("/") + 1);


					String newFileName = fileName;
					InputStream in = item.getInputStream();


					String name = new Date().getTime() + newFileName;
					String savePath = storePath + "/" + name;
					String url = url2 + "/" + name;
					// System.out.println(item.getFieldName()+"上传的文件地址:"+savePath);
					if (item.getFieldName().equals("image")) {
						image.append(url);
						image.append(",");
					}
					if (item.getFieldName().equals("details_image")) {
						details_image.append(url);
						details_image.append(",");
					} else {
						paramMap.put(item.getFieldName(), url);
					}


					OutputStream out = new FileOutputStream(savePath);
					byte b[] = new byte[1024];
					int len = 0;
					while ((len = in.read(b)) != -1) {
						out.write(b, 0, len);
					}


					in.close();
					out.close();
					item.delete();// 删除临时文件
				}
			}
			if (image != null && image.length() != 0 && !"".equals(image.toString())) {
				String images = image.toString().substring(0, image.toString().length() - 1);


				paramMap.put("image", images);
			}


			if (details_image != null && details_image.length() != 0 && !"".equals(details_image.toString())) {
				String details_images = details_image.toString().substring(0, details_image.toString().length() - 1);


				paramMap.put("details_image", details_images);
			}

		} catch (Exception e) {
			e.printStackTrace();
			request.setAttribute("message", "上传失败");
			request.getRequestDispatcher("/message.jsp").forward(request, response);
		}
		return paramMap;
	}
}


cos.jar包下载  点击打开链接  如果还有什么问题 可以加 qq93472007






阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34469943/article/details/69945158
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭