上传文件

简介:

1、jsp中注意问题

//文件上传,注意form中要定义  enctype="multipart/form-data"

<form action="<%=basePath%>system/appversion/save.do" method="post" 
	 id="form-appversion-edit-add" enctype="multipart/form-data" >
	<div>
		<label >文件:</label>
		<input type="file" name="apkFile"  id="apkFile"><button type="button" id="uploadButton" onclick="uploadApk()">上传</button>
	</div>
	<div >
		<label >文件路径:</label>
		<input type="text" class="input-text" value="${pd.appUrl }" name="appUrl" id="appUrl_edit" datatype="*" nullmsg="请选择文件" readonly="readonly">
	</div>
	
	<div>		
		<input id="appEdit_submitButton" class="btn btn-primary radius" type="submit" value="&nbsp;&nbsp;提交&nbsp;&nbsp;">
	</div>	
</form>

②js中ajax中提交文件

<script type="text/javascript">
	//上传文件,这里是封装到form数据中传给后台。不是form的submit提交。
	function uploadApk(){
		var apkFile = $("#apkFile").val();
		if(apkFile == ''){
			layer.alert("请选择文件");
			return;
		}
		var formData = new FormData($("#apkFile")[0].files[0]);
		formData.append("apkFile",$("#apkFile")[0].files[0]);
		$.ajax({
			type:'POST',
			url:'system/appversion/upload.do',
			data:formData,
			dataType:"json",
			processData : false, 
			contentType : false,
			success: function(data){
				$("#appUrl_edit").val(data.appUrl);
				$("#uploadButton").attr("disabled", true); 
			},
			error: function(err){
				layer.alert("服务器错误");
			}
		});
	}

</script>


③后台上传的方法

	/**
	 *app版本管理上传文件
	 * 
	 * @param
	 * @throws Exception
	 */
	@ActionDesc(description="app版本管理上传文件",methodType="post")
	@RequestMapping(value = "/upload")
	@ResponseBody
	public AppVersion upload(@RequestParam(required = false)MultipartFile apkFile) throws Exception {
		String appUrl = "";
		if (!apkFile.isEmpty()) {
			// 文件原名称
			String fileName = apkFile.getOriginalFilename();
			String formatDay = DateUtil.getDays();
			// 为了避免重复简单处理
			String photoImagePath = PropertyUtil.readValue(Const.APK_PATH);
			long currentTimeMillis = System.currentTimeMillis();
			// 上传位置路径
			String path0 = photoImagePath + "/" + formatDay + "/" + currentTimeMillis + "/" + fileName;
			// 按照路径新建文件
			File newFile = new File(path0);
			File newFile1 = new File(photoImagePath + "/" + formatDay + "/" + currentTimeMillis);
			if (!newFile1.exists()) {
				newFile1.mkdirs();
			}
			// 复制
			FileCopyUtils.copy(apkFile.getBytes(), newFile);
			appUrl = "appversion/downloadNewApk.do?newApkUrl=" + path0;
		}
		AppVersion appVersion = new AppVersion();
		appVersion.setAppUrl(appUrl);
		return appVersion;
	}


④后台下载方法

只要不是在项目中,即在其他目录下,那么就需要通过流的方式去读取文件,返回一个流。

/**
	 * 下载apk
	 * 
	 * @param newApkUrl
	 *            最新的apk下载的URL
	 * 
	 */
	@ActionDesc(description = "下载apk", methodType = "post")
	@RequestMapping("/downloadNewApk")
	@ResponseBody
	public void downloadNewApk(String newApkUrl) throws Exception {
		HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
				.getResponse();// 获取response
		if (!Tools.isEmpty(newApkUrl)) {
			// 文件路径(windows下是\\,linux下是//,都必须是绝对路径)
			String path = PropertyUtil.readValue(Const.APK_PATH) + newApkUrl;
			// java中用File类来表示一个文件
			java.io.File newFile = new java.io.File(path);
			// 测试这个文件路径是否存在(也就是这个文件是否存在)
			if (!newFile.exists()) {
				return;
			}
			// FileUtils.readFileToByteArray(File file)把一个文件转换成字节数组返回
			byte[] data = FileUtils.readFileToByteArray(newFile);
			String[] strArr = newApkUrl.split("/");
			String fileName = strArr[strArr.length - 1];
			response.reset();
			// 设置文件的返回类型
			response.setContentType("application/octet-stream;charset=UTF-8");
			response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
			response.addHeader("Content-Length", "" + data.length);
			OutputStream outputStream = response.getOutputStream();
			outputStream.write(data);
			// java在使用流时,都会有一个缓冲区,按一种它认为比较高效的方法来发数据:
			// 把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发.
			// 而flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满.
			outputStream.flush();
			outputStream.close();
		} else {
			return;
		}
	}





      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/2045378,如需转载请自行联系原作者


相关文章
C#文件上传
C#文件上传
63 0
|
26天前
|
存储 PHP 文件存储
32 单文件上传
路老师分享PHP文件上传教程,涵盖配置php.ini、使用$_FILES变量和move_uploaded_file()函数等关键步骤,帮助你轻松实现单文件上传功能。纯干货,技术知识分享。
30 1
|
1月前
|
Java
smartupload文件上传!
使用 `smartupload.jar` 实现文件上传和下载。首先将 `smartupload.jar` 添加到项目中,然后创建上传页面,确保表单使用 `POST` 方法并设置 `enctype=&quot;multipart/form-data&quot;`。接着在服务器端通过 `SmartUpload` 对象处理文件上传,保存文件到指定目录,并获取表单中的其他数据。最后,实现文件下载功能,设置响应头以触发浏览器下载文件。
36 0
|
4月前
|
前端开发 JavaScript 数据库
多个文件上传
多个文件上传
34 0
|
7月前
|
对象存储
阿里云上传文件
阿里云上传文件
171 0
|
存储 移动开发 JavaScript
|
前端开发
前端上传文件或者上传文件夹
前端上传文件或者上传文件夹
253 0
前端上传文件或者上传文件夹
|
开发框架 安全 JavaScript
文件上传利用总结
文件上传利用总结
368 0