APP前后台文件与图片传输

     刚做APP不久,做到文件传输的时候想了很多的方法都不是很理想,在同事的建议下采用Base64 的编码解码方式,这样方式确实蛮好的,也支持断点操作,且安全,只要页面和后台的编码和解码方式统一即可。在路径返回上也做了处理,是在服务器的路径下建一个文件夹保存用户上传的文件。贴上代码:

private String decode(String file) throws IOException{
		String fileExt = "";
		fileExt = file.substring(file.lastIndexOf(".")).toLowerCase();
		byte[] byteDatas = Base64.decode(file.substring(0, file.lastIndexOf(".")));
		String str = ServletActionContext.getServletContext().getRealPath("/") + "userPic/";
		String saveUrl = request().getContextPath() + "/userPic/";
        File saveDirFile = new File(str);
        if (!saveDirFile.exists()) {
        	saveDirFile.mkdirs();
        }
        
        String newFileName = FileUtils.getFileName()+ fileExt ;
	 	File ret = null;  
        BufferedOutputStream stream = null;  
        try {  
            ret = new File(str+newFileName);  
            FileOutputStream fstream = new FileOutputStream(ret);  
            stream = new BufferedOutputStream(fstream);  
            stream.write(byteDatas);
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			stream.close();
		}
		return saveUrl + newFileName;
	}

       最近又遇到了个问题base64传文件时,文件不能过大,之后又选择了另外一种方式解决:将APP端的文件以File对象传输,java后台也以File对象来接收保存,贴上代码:

// 上传文件域
	private File frequency_path;

/**
	 * 获取app端上传的文件
	 * @return
	 * @throws Exception
	 */
	public String uploadFile() throws Exception {
		String filePath = ServletActionContext.getServletContext().getRealPath(
				"/")
				+ "userVideo/";
		String saveUrl = request().getContextPath() + "/" + "userVideo" + "/";
		File mf = new File(filePath);
		if (!mf.exists()) {
			mf.mkdirs();
		}
		String fileName = FileUtils.getFileName() + ".mp3";
		FileOutputStream fos = null;
		FileInputStream fis = null;
		try {
			System.out.println("获取Android端传过来的普通信息:");
			System.out.println("文件存放目录: " + filePath);
			System.out.println("文件名称: " + fileName);
			System.out.println("文件大小: " + frequency_path == null ? 0
					: frequency_path.length());
			File outFile = new File(filePath + File.separator + fileName);
			fos = new FileOutputStream(outFile);
			fis = new FileInputStream(getFrequency_path());
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = fis.read(buffer)) != -1) {
				fos.write(buffer, 0, len);
			}
			System.out.println("文件上传成功");
		} catch (Exception e) {
			System.out.println("文件上传失败");
			e.printStackTrace();
		} finally {
			if (fos != null) {
				fos.close();
			}
			if (fis != null) {
				fis.close();
			}
		}
		return saveUrl + fileName;
	}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值