关闭

文件的上传、下载

标签: java springmvc 上传 下载
970人阅读 评论(0) 收藏 举报
分类:
package com.rl.ecps.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import net.sf.json.JSONObject;

import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.rl.ecps.utils.ECPSUtils;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

/**
 * 图片、文件上传
 * 
 * @author zhaojd
 *
 */
@Controller
@RequestMapping("/upload")
public class EbUploadController {

	/**
	 * 文件上传方式一
	 * 		关键点,上传到图片服务器;通过jersey辅助
	 * 		缺陷:
	 * 			没有检查目录,没有去创建一层文件夹来提高IO
	 * @param imgsFile
	 * @throws IOException
	 */
	@RequestMapping("/uploadPic.do")
	public void uploadPic(@RequestParam("imgsFile") MultipartFile imgsFile, PrintWriter pw) throws IOException {
		
		// 图片名称的生成策略
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		String format = simpleDateFormat.format(new Date());
		Random random = new Random();
		for (int i = 0; i < 3; i++) {
			format += random.nextInt(10);
		}
		// 获取图片的后缀名
		String ext = FilenameUtils.getExtension(imgsFile.getOriginalFilename());
		String fileName = format + "." + ext;
		// 上传文件的绝对路径
		String url = ECPSUtils.readProp("file_path") + "/upload/" + fileName;
		// 上传文件的相对路径 用于保存在数据库
		String path = "/upload/"+ fileName;

		// 图片上传到另外一台服务器,需要jersey辅助
		Client client = new Client();
		// 设置请求路径
		WebResource resource = client.resource(url);
		// 获取文件的字节数据
		byte[] fileByteArray = imgsFile.getBytes();
		resource.put(fileByteArray);
		JSONObject jo = new JSONObject();
		jo.put("url", url);
		jo.put("path", path);
		pw.write(jo.toString());
	}

	/**
	 * 文件上传方式二
	 * 		缺陷:
	 * 		      开始获取文件的方式繁琐,且存在方式一的问题,仅供参考思路
	 * 
	 * @param request
	 * @param out
	 * @param lastPath
	 * @throws IOException
	 */
	// @RequestMapping("/uploadPic.do")
	// public void uploadPic(HttpServletRequest request, PrintWriter out, String lastPath) throws IOException{
	// //强制转换request
	// MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
	// //获得文件
	// Iterator<String> iter = mr.getFileNames();
	// String fileInputName = iter.next();
	// MultipartFile mf = mr.getFile(fileInputName);
	// //获得文件的字节数组
	// byte[] byteArr = mf.getBytes();
	// String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
	// Random random = new Random();
	// for(int i = 0 ; i < 3; i++){
	//     fileName = fileName + random.nextInt(10);
	// }
	// //获得原始文件名
	// String oriFileName = mf.getOriginalFilename();
	// String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
	// //获得文件服务器的主机地址
	// String filePath = ECPSUtils.readProp("file_path");
	// //获得上传文件的绝对路径
	// String realPath = filePath + "/upload/"+fileName + suffix;
	// String relativePath = "/upload/"+fileName + suffix;
	// Client client = Client.create();
	// if(StringUtils.isNotBlank(lastPath)){
	// WebResource wr1 = client.resource(lastPath);
	//     wr1.delete();
	// }
	// //创建Jersey客户端
	// WebResource wr = client.resource(realPath);
	// wr.put(byteArr);
	// //ajax返回多个值的时候要使用JSON
	// JSONObject jo = new JSONObject();
	// jo.accumulate("realPath", realPath);
	// jo.accumulate("relativePath", relativePath);
	// //{"realPath":"http://.....", "relativePath":"/upload/..."}
	// String result = jo.toString();
	// out.write(result);
//  }

	
	/**
	 * 文件上传方式三
	 * 		上传文件到同一服务器下的某个目录中,进行了目录检查及根据日期创建一层目录来提高IO
	 */
//	public String upload(MultipartFile helpFile) {
//		// 获得上传文件的保存路径    fileBase写在配置文件中的一个linux路径,UPLOAD_PATH="/help_doc/" 这样一个值;
//		String savePath = fileBase + UPLOAD_PATH; 
//		// 检查目录
//		File uploadDir = new File(savePath);
//		if (!uploadDir.exists() || !uploadDir.isDirectory()) {
//			uploadDir.mkdirs();
//		}
//		// 创建文件夹
//		SimpleDateFormat sdf = new SimpleDateFormat(CommonHelper.FORMAT_YYYYMMDD);
//		String ymd = sdf.format(new Date());
//		savePath += ymd + "/";
//		File dirFile = new File(savePath);
//		if (!dirFile.exists())
//			dirFile.mkdirs();
//		// 获取原始文件名
//		String originalFileName = helpFile.getOriginalFilename();
//		// 获取到文件的扩展名
//		String fileExt = originalFileName.substring(originalFileName.lastIndexOf(".")).toLowerCase();
//		// 新的文件名 当前时间值 + 三位int型随机数
//		String newFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
//		Random random = new Random();
//		for (int i = 0; i < 3; i++) {
//			newFileName += random.nextInt(10);
//		}
//		newFileName += fileExt;
//		// 上传文件的相对路径
//		String relativePath = UPLOAD_PATH + ymd + "/" + newFileName;
//		File uploadedFile = new File(savePath, newFileName);
//		try {
//			helpFile.transferTo(uploadedFile);
//		} catch (IOException e) {
//			throw new RuntimeException(" ");
//		}
//		return relativePath;
//	}
//
//	/**
//	 * 文件下载
//	 */
//	@Override
//	@Transactional
//	public void downloadFile(String path, String docNameAddExt, HttpServletResponse response, HttpServletRequest request) {
//		FileInputStream fos = null;
//		ServletOutputStream sos = null;
//		try {
//			response.setContentType("multipart/form-data");
//			response.setHeader("Content-Disposition", "attachment; filename=" + new String(docNameAddExt.getBytes("gbk"), "iso-8859-1"));
//			fos = new FileInputStream(new File(fileBase + path));
//			sos = response.getOutputStream();
//			int read = 0;
//			byte b[] = new byte[1024 * 1024 * 1];// 1M
//			while ((read = fos.read(b)) != -1) {
//				sos.write(b, 0, read);// 每次写1M
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		} finally {
//			try {
//				if (sos != null) {
//					sos.close();
//				}
//				if (fos != null) {
//					fos.close();
//				}
//			} catch (IOException e) {
//				throw new RuntimeException("");
//			}
//		}
//	}
}

0
0
查看评论

七牛-怎样自定义上传文件的文件名字(key)

三种方式可以指定key 第一种方案: 客户需要在服务端生成token中,  tokenb中参数设置请参考文档:http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html  ...
  • github_37360787
  • github_37360787
  • 2017-02-20 17:03
  • 2215

文件上传的几种方式

SpringMVC+Jcrop截图插件+ajaxFileUpload项目搭建 Maven包导入 <!-- J2EE 包 --> <dependency> <groupId>javax</groupId&...
  • a382256612
  • a382256612
  • 2016-07-08 11:08
  • 6448

文件的上传和下载

ja文件的的上传和下载
  • u014072118
  • u014072118
  • 2018-01-23 12:40
  • 15

前段需要写个上传文件的功能

前段需要写个上传文件的功能,现在就把他贴上来。 package com.xiaobus.util;import java.io.File;import java.io.FileOutputStream;import java.io.InputStre...
  • xdy3008
  • xdy3008
  • 2007-09-26 14:39
  • 573

文件上传——java后台代码

最近,要测试文件上传API,文件上传的东西还挺多的。 要测试,首先得有后台吧,所以,简单搭了个springMVC,引入必要的jar包,然后写了个文件上传接口。 @RequestMapping(value = "/upload", method = RequestMet...
  • chdyiboke
  • chdyiboke
  • 2018-02-02 18:18
  • 40

文件的上传、下载

package com.rl.ecps.controller; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; imp...
  • ZJDWHD
  • ZJDWHD
  • 2016-06-01 00:47
  • 970

java实现文件的上传和下载

java关于文件上传和下载功能的实现 文件的上传和下载在日常工作开发中被经常使用到,所有在这里总结一下具体的代码实现,我会通过一套完整的操作流程来实现所有功能(文件可以是文本文件,也可以是音频文件) 操作流程: 首先进入文件上传页面将需上传的文件上传至服务器 文件上传至服务器指定路径后返回前...
  • u014316026
  • u014316026
  • 2015-08-14 10:20
  • 5027

下载上传的文件

private void FileDownload(string FullFileName)//下载 { FileInfo DownloadFile = new FileInfo(FullFileName); //设置要下载的文件 Response.Clear(); ...
  • hjingtao
  • hjingtao
  • 2011-12-14 21:13
  • 340

NoHttp上传多文件

/** * 上传多文件 * @param url * @param what * @param map 普通参数 * @param fileList 文件集合 * @param fileKeyList 文件的key集合 *...
  • XiFangzheng
  • XiFangzheng
  • 2016-10-12 15:56
  • 1913

文件快速上传和下载原理

Remote端(服务器端)数据的处理没必要去实现这个算法。直接调用库就可以了。chunk一块一块的数据块1. 将Remote端(服务器端)的数据按照Chunck进行切分2. 计算每一个chunk的弱校验和(Adler-32算法)与强校验和(MD5算法)3. 保存进Map中,key为弱校验ID,val...
  • kelanQ
  • kelanQ
  • 2016-03-17 12:57
  • 887
    个人资料
    • 访问:176307次
    • 积分:3194
    • 等级:
    • 排名:第12730名
    • 原创:140篇
    • 转载:53篇
    • 译文:0篇
    • 评论:6条
    博客专栏