webservice传递文件

本文介绍通过Webservice传递文件的方法,包括文件流、DataHandler及URL下载三种方式,并提供具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

webservice传递文件


前言

提示:有些特定环境需要把文件传递到其他系统,但通过webservice传递的情况会有很多种情况,如小文件(图片等小于3M的文件),大文件(大于10M的文件);
因此采用几种方式:
1、小于3M(不大于7M)的情况,使用转化为文件流进行传递
2、大于10M的情况下使用DataHandler传递及URL下载的方式。


一、转化为文件流作为参数直接传递

1. 传递参数(文件)

1、引用
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
2、方法
	//得到接口传递参数json串
	public boolean getFileInfo(String dataId) {
		boolean flag = false;
		if(!"".equals(dataId)){
			String sql="select * from w_table where id='"+dataId+"'";
			List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
			//其他信息在list里
			for (Map<String, Object> map : list) {
				try {
					//附件传递
					String fileField = CommonTools.Obj2String(map.get("F_FJ"));
					if (!"".equals(fileField)) {
						JSONArray files = JSONArray.parseArray(fileField);
						for (int i = 0; i< files.size(); i++) {
							JSONObject file = (JSONObject) files.get(i);
							String fileId = file.get("id").toString();
							SysFile wtfj = sysFileService.getById(Long.valueOf(fileId));
							map.put("F_wtfj_Content_" + i, this.getFileStream(wtfj));
							map.put("F_wtfj_Security_" + i, wtfj.getSecurity());
							map.put("F_wtfj_Describe_" + i, wtfj.getDescribe());
							map.put("F_wtfj_Dimension_" + i, wtfj.getDimension());
							map.put("F_wtfj_Creator_" + i, wtfj.getCreator());
							map.put("F_wtfj_CreatorId_" + i, wtfj.getCreatorId().toString());
						}
					}
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
			}
			if(list.size()>0){
				flag = getConnection(JSON.toJSONString(list));
			}
		}
		return flag;
	}
	//转换文件字符串
	public String getFileStream(SysFile sysFile) throws FileNotFoundException {
		String filename = sysFile.getFilename() + "." + sysFile.getExt();
		String filepath = AppUtil.getAttachPath() + File.separator + String.valueOf(sysFile.getFilepath());
		Boolean isNoGroup = sysFile.getFilepath().startsWith("group");//判断是否分布式文件
		String destFilePath="";
		if(isNoGroup){//分布式文件存储解密操作
			filepath = sysFile.getFilepath();
			// by liubo:对加密文件进行解密处理
			destFilePath = this.sysFileService.getDecodeFilePath(filepath, filename, sysFile.getIsEncrypt(),false);
			if (!"".equals(destFilePath)) {
				filepath = destFilePath;
				//分布式文件进行解密处理后就按照本地文件进行压缩等操作
				isNoGroup = false;
			}
		} else {
			// by weilei:对加密文件进行解密处理
			destFilePath = this.sysFileService.getDecodeFilePath(filepath, filename, sysFile.getIsEncrypt(),false);
			if (!"".equals(destFilePath)) {
				filepath = destFilePath;
			}
		}
		//根据文件路径得到文件流
		File file = new File(filepath);
		FileInputStream is = new FileInputStream(file);
		String fileStr = null;
		try {
			fileStr = streamToString(is);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return fileStr;
	}
	/**
	 * 将流转换成字符串 使用Base64加密
	 * 
	 * @param in输入流
	 * @return
	 * @throws IOException
	 */
	public static String streamToString(InputStream inputStream) throws IOException {
		byte[] bt = toByteArray(inputStream);
		inputStream.close();
		String out = new sun.misc.BASE64Encoder().encodeBuffer(bt);
		return out;
	}
	/**
	 * 
	 * summary:将流转化为字节数组
	 * 
	 * @param inputStream
	 * @return
	 * @throws IOException
	 * 
	 */
	public static byte[] toByteArray(InputStream inputStream) throws IOException {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024 * 4];
		byte[] result = null;
		try {
			int n = 0;
			while ((n = inputStream.read(buffer)) != -1) {
				out.write(buffer, 0, n);
			}
			result = out.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			out.close();
		}
		return result;
	}
	//添加接口校验的用户信息
	public Call getUser() {
		Call call = null;
		try {
			Service service = new Service();
			call = (Call)service.createCall();
			String url="http://127.0.0.1:8085/ibms/services/IQualityProblemsSyncService";
			call.setTargetEndpointAddress(new java.net.URL(url));
			//调用方法名
			call.setOperationName("getQualityProblems");
			//调用时间20s
			call.setTimeout(20000);
		} catch (Exception e) {
				e.printStackTrace();
		}
		return call;
	}
	//调用接口
	public boolean getConnection(String Info){
		boolean flag=false;
		try{
			Call call =serviceUtil.getUser();
			String result = (String) call.invoke(new Object[]{Info});
			flag =true;
		}
		catch(Exception e){
			flag=false;
			e.printStackTrace();
		}
		return flag;
	}

2. 接收参数(文件)

1、引用

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import sun.misc.BASE64Decoder;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cssrc.ibms.api.core.util.UniqueIdUtil;
import com.cssrc.ibms.api.log.util.LogThreadLocalHolder;
import com.cssrc.ibms.api.system.util.PropertyUtil;
import com.cssrc.ibms.api.sysuser.intf.ISysOrgService;
import com.cssrc.ibms.api.sysuser.intf.ISysUserService;
import com.cssrc.ibms.api.sysuser.model.ISysOrg;
import com.cssrc.ibms.api.sysuser.model.ISysUser;
import com.cssrc.ibms.api.sysuser.util.UserContextUtil;
import com.cssrc.ibms.core.db.mybatis.dao.JdbcDao;
import com.cssrc.ibms.core.form.service.SerialNumberService;
import com.cssrc.ibms.core.util.appconf.AppUtil;
import com.cssrc.ibms.core.util.bean.BeanUtils;
import com.cssrc.ibms.core.util.common.CommonTools;
import com.cssrc.ibms.core.util.date.DateUtil;
import com.cssrc.ibms.core.util.file.FileOperator;
import com.cssrc.ibms.core.util.string.StringUtil;
import com.cssrc.ibms.system.model.SysFile;
import com.cssrc.ibms.system.model.SysFileFolder;
import com.cssrc.ibms.system.model.SysParameter;
import com.cssrc.ibms.system.service.SolrService;
import com.cssrc.ibms.system.service.SysFileFolderService;
import com.cssrc.ibms.system.service.SysFileService;
import com.cssrc.ibms.system.service.SysParameterService;
import com.cssrc.ibms.system.service.SysTypeKeyService;
import com.cssrc.ibms.system.util.SysFileUtil;
import com.cssrc.ibms.webservice.IQualityProblemsSyncService;
2、代码
//接收数据
public String getQualityProblems(String listString) {
		String msg = "";
		if (!"".equals(listString)) {
			List<Map<String, Object>> list = toListMap(listString);
			for (Map<String, Object> map : list) {
				String id = CommonTools.Obj2String(map.get("ID"));
				String F_FJ = CommonTools.Obj2String(map.get("F_FJ"));
				if (StringUtil.isNotEmpty(F_FJ)) {
					JSONArray newFiles = new JSONArray();
					JSONArray files = JSONArray.parseArray(F_FJ);
					for (int i=0; i<files.size(); i++) {
						JSONObject file = (JSONObject) files.get(i);
						String wtfj_FileName = file.get("name").toString();
						String wtfj_Content = CommonTools.Obj2String(map.get("F_wtfj_Content_"+i));
						String wtfj_Creator = CommonTools.Obj2String(map.get("F_wtfj_Creator_"+i));
						String wtfj_CreatorId = CommonTools.Obj2String(map.get("F_wtfj_CreatorId_"+i));
						String wtfjId = this.handleFile(wtfj_Content, wtfj_FileName, wtfj_Security, wtfj_Describe, 
								wtfj_Dimension, wtfj_Creator, wtfj_CreatorId);
						file.put("id", wtfjId);
						newFiles.add(file);
					}
					map.put("F_wtfj", newFiles.toString());
				}
				// 其他字段
				String XX = CommonTools.Obj2String(map.get("XX"));//密级
				//文件附件重新获取
				String wtfj = CommonTools.Obj2String(map.get("F_wtfj"));
				//更新or插入
				String sql = "select * from w_table where id = '" + id + "'";
				List<Map<String, Object>> datas = jdbcDao.queryForList(sql, null);
				if (datas.size()>0) {
					String upsql="update w_zlwtb set F_MJ='"+F_MJ+"',F_XXMC='"+F_XXMC+"' WHERE id='"+id+"'";
					jdbcDao.upd(upsql);
				} else {
					String id1=String.valueOf(UniqueIdUtil.genId());
					String zlSql = "insert into w_zlwtb "
							+ "(XX,XX) values "
							+ "("+id1+",'"+XX+"')";
					jdbcDao.upd(zlSql);
				}
				
			}
		}
		return msg;
	}
	@SuppressWarnings("unchecked")
	public static List<Map<String, Object>> toListMap(String json) {
		List<Object> list = JSON.parseArray(json);
		List<Map<String, Object>> listw = new ArrayList<Map<String, Object>>();
		for (Object object : list) {
			Map<String, Object> ret = (Map<String, Object>) object;// 取出list里面的值转为map
			listw.add(ret);
		}
		return listw;
	}
	//文件上传系统并记录数据 fileContent文件流字符串
	@SuppressWarnings("unchecked")
	public String handleFile(String fileContent, String fileName, String security, String describe, String dimension, String creator, String creatorId) {
		Long fileId = UniqueIdUtil.genId();
		try {
			InputStream is = new ByteArrayInputStream(fileContent.getBytes());
			BASE64Decoder decoder = new sun.misc.BASE64Decoder();
			byte[] content = decoder.decodeBuffer(is);
			String extName = FileOperator.getSuffix(fileName);
			String relativeFullPath =   FileOperator.generateFilenameNoSemicolon(fileName);
			// 附件保存路径
			String attachPath = AppUtil.getAttachPath();
			Calendar cal = Calendar.getInstance();
			String storePath= ""+cal.get(Calendar.YEAR)+File.separator+(cal.get(Calendar.MONTH)+1)+File.separator+cal.get(Calendar.DAY_OF_MONTH);
			String filePath = "";
			SysFile sysFile = new SysFile();
			sysFile.setFileId(fileId);
			//By weilei:添加文件上传参数:密级、描述
			if(CommonTools.isNullString(security)) {
				security = "";
			}else{
				LogThreadLocalHolder.putParamerter("resourceSecretLevel",ISysUser.SECURITY_USER_MAP.get(security));
			}
			sysFile.setSecurity(security);
			sysFile.setDescribe(describe);
			sysFile.setKeywordText("");
			sysFile.setDimension(dimension);
			//获取系统是否加密的参数
			List<SysParameter> needEncrypt = sysParameterService.getByParamName("IS_SAVE_SECURITY");
			if (needEncrypt.size() > 0 && "是".equals(needEncrypt.get(0).getParamvalue())) {
				//给文件是否加密属性设置为加密
				sysFile.setIsEncrypt(1L);
			}
			// 附件保存路径
			String saveType = PropertyUtil.getSaveType();
			if (saveType.contains("database"))
				sysFile.setFileBlob(content);
			else {
				filePath = SysFileUtil.createFilePath(attachPath+ File.separator+storePath + File.separator, relativeFullPath);
				FileOperator.writeByte(filePath, content);
			}
			// end 写入物理文件
			// 向数据库中添加数据 FileUtils
			// 附件名称
			sysFile.setFilename(fileName.substring(0, fileName.lastIndexOf('.')));
			relativeFullPath = storePath + File.separator + relativeFullPath;
			sysFile.setFilepath(relativeFullPath);  //保存相对路径
			// 上传时间
			sysFile.setCreatetime(new java.util.Date());
			// 扩展名
			sysFile.setExt(extName);
			// 字节总数
			int len = content.length;
			sysFile.setTotalBytes((long) len);
			// 说明
			sysFile.setNote("");
			sysFile.setCreatorId(Long.valueOf(creatorId));
			sysFile.setCreator(creator);
			// 总的字节数
			sysFile.setDelFlag(SysFile.FILE_NOT_DEL);
			sysFile.setParentId(sysFile.getFileId());//初始版本两值一致
			//类型
			sysFile.setProtypeId(8L);
			sysFile.setFileType("FILE");
			sysFile.setFolderid(-1L);
			sysFile.setFileatt(SysFile.FILEATT_TRUE);
			sysFile.setShared((short) 0);
			this.sysFileService.add(sysFile);
			List<SysFile> sysFiles;
			if (LogThreadLocalHolder.getParamerter("sysFiles") == null) {
				sysFiles = new ArrayList<SysFile>();
				LogThreadLocalHolder.putParamerter("sysFiles", sysFiles);
			} else {
				sysFiles = (List<SysFile>) LogThreadLocalHolder.getParamerter("sysFiles");
			}
			sysFiles.add(sysFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
        return fileId.toString();
    }
    

二、DataHandler方式

1. 传递参数

1、引用
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
2、方法
//这样就相当于构造了一个带文件路径的File了
DataHandler handler = new DataHandler(new FileDataSource(path));
//然后把DataHandler参数进行传递,注意需要发布方的参数是DataHandler 

2. 接收参数

InputStream inputStream = handler.getInputStream();

三、URL下载

1. 传递参数

//把下载文件的url放到参数里
//如:http://127.0.0.1:8080/ibms/S2001/qmsProject/downloadFile.do?fileId=fileId
//得到接口传递参数json串
	public boolean getFileInfo(String dataId) {
		boolean flag = false;
		if(!"".equals(dataId)){
			String sql="select * from w_table where id='"+dataId+"'";
			List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
			//获取下载文件url
			List<? extends ISysParameter> downloadUrlList = sysParameterService.getByParamName("downloadUrl");
			String downloadUrl = downloadUrlList.get(0).getParamvalue();
			//其他信息在list里
			for (Map<String, Object> map : list) {
				try {
					//附件传递
					String fileField = CommonTools.Obj2String(map.get("F_FJ"));
					if (!"".equals(fileField)) {
						JSONArray files = JSONArray.parseArray(fileField);
						for (int i = 0; i< files.size(); i++) {
							JSONObject file = (JSONObject) files.get(i);
							String fileId = file.get("id").toString();
							//存入文件
						    SysFile wtfj = sysFileService.getById(Long.valueOf(fileId));
						    String downString = downloadUrl+fileId;
						    //原内容用文件ID代替
						    map.put("F_wtfj_Content_" + i, downString);
							map.put("F_wtfj_Security_" + i, wtfj.getSecurity());
							map.put("F_wtfj_Describe_" + i, wtfj.getDescribe());
							map.put("F_wtfj_Dimension_" + i, wtfj.getDimension());
							map.put("F_wtfj_Creator_" + i, wtfj.getCreator());
							map.put("F_wtfj_CreatorId_" + i, wtfj.getCreatorId().toString());
						}
					}
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
			}
			if(list.size()>0){
				flag = getConnection(JSON.toJSONString(list));
			}
		}
		return flag;
	}
	//转换文件字符串
	public String getFileStream(SysFile sysFile) throws FileNotFoundException {
		String filename = sysFile.getFilename() + "." + sysFile.getExt();
		String filepath = AppUtil.getAttachPath() + File.separator + String.valueOf(sysFile.getFilepath());
		Boolean isNoGroup = sysFile.getFilepath().startsWith("group");//判断是否分布式文件
		String destFilePath="";
		if(isNoGroup){//分布式文件存储解密操作
			filepath = sysFile.getFilepath();
			// by liubo:对加密文件进行解密处理
			destFilePath = this.sysFileService.getDecodeFilePath(filepath, filename, sysFile.getIsEncrypt(),false);
			if (!"".equals(destFilePath)) {
				filepath = destFilePath;
				//分布式文件进行解密处理后就按照本地文件进行压缩等操作
				isNoGroup = false;
			}
		} else {
			// by weilei:对加密文件进行解密处理
			destFilePath = this.sysFileService.getDecodeFilePath(filepath, filename, sysFile.getIsEncrypt(),false);
			if (!"".equals(destFilePath)) {
				filepath = destFilePath;
			}
		}
		//根据文件路径得到文件流
		File file = new File(filepath);
		FileInputStream is = new FileInputStream(file);
		String fileStr = null;
		try {
			fileStr = streamToString(is);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return fileStr;
	}
	/**
	 * 将流转换成字符串 使用Base64加密
	 * 
	 * @param in输入流
	 * @return
	 * @throws IOException
	 */
	public static String streamToString(InputStream inputStream) throws IOException {
		byte[] bt = toByteArray(inputStream);
		inputStream.close();
		String out = new sun.misc.BASE64Encoder().encodeBuffer(bt);
		return out;
	}
	/**
	 * 
	 * summary:将流转化为字节数组
	 * 
	 * @param inputStream
	 * @return
	 * @throws IOException
	 * 
	 */
	public static byte[] toByteArray(InputStream inputStream) throws IOException {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024 * 4];
		byte[] result = null;
		try {
			int n = 0;
			while ((n = inputStream.read(buffer)) != -1) {
				out.write(buffer, 0, n);
			}
			result = out.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			out.close();
		}
		return result;
	}
	//添加接口校验的用户信息
	public Call getUser() {
		Call call = null;
		try {
			Service service = new Service();
			call = (Call)service.createCall();
			String url="http://127.0.0.1:8085/ibms/services/IQualityProblemsSyncService";
			call.setTargetEndpointAddress(new java.net.URL(url));
			//调用方法名
			call.setOperationName("getQualityProblems");
			//调用时间20s
			call.setTimeout(20000);
		} catch (Exception e) {
				e.printStackTrace();
		}
		return call;
	}
	//调用接口
	public boolean getConnection(String Info){
		boolean flag=false;
		try{
			Call call =serviceUtil.getUser();
			String result = (String) call.invoke(new Object[]{Info});
			flag =true;
		}
		catch(Exception e){
			flag=false;
			e.printStackTrace();
		}
		return flag;
	}

2. 接收参数

1、引用
package com.cssrc.ibms.webservice.Impl;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.activation.DataHandler;
import javax.annotation.Resource;

import sun.misc.BASE64Decoder;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cssrc.ibms.api.core.util.UniqueIdUtil;
import com.cssrc.ibms.api.log.util.LogThreadLocalHolder;
import com.cssrc.ibms.api.system.util.PropertyUtil;
import com.cssrc.ibms.api.sysuser.intf.ISysOrgService;
import com.cssrc.ibms.api.sysuser.intf.ISysUserService;
import com.cssrc.ibms.api.sysuser.model.ISysOrg;
import com.cssrc.ibms.api.sysuser.model.ISysUser;
import com.cssrc.ibms.api.sysuser.util.UserContextUtil;
import com.cssrc.ibms.core.db.mybatis.dao.JdbcDao;
import com.cssrc.ibms.core.form.service.SerialNumberService;
import com.cssrc.ibms.core.util.appconf.AppUtil;
import com.cssrc.ibms.core.util.bean.BeanUtils;
import com.cssrc.ibms.core.util.common.CommonTools;
import com.cssrc.ibms.core.util.date.DateUtil;
import com.cssrc.ibms.core.util.file.FileOperator;
import com.cssrc.ibms.core.util.string.StringUtil;
import com.cssrc.ibms.system.model.GlobalType;
import com.cssrc.ibms.system.model.SysFile;
import com.cssrc.ibms.system.model.SysFileFolder;
import com.cssrc.ibms.system.model.SysFileType;
import com.cssrc.ibms.system.model.SysParameter;
import com.cssrc.ibms.system.service.GlobalTypeService;
import com.cssrc.ibms.system.service.SolrService;
import com.cssrc.ibms.system.service.SysFileFolderService;
import com.cssrc.ibms.system.service.SysFileService;
import com.cssrc.ibms.system.service.SysFileTypeService;
import com.cssrc.ibms.system.service.SysParameterService;
import com.cssrc.ibms.system.service.SysTypeKeyService;
import com.cssrc.ibms.system.util.SysFileUtil;
import com.cssrc.ibms.webservice.IQualityProblemsSyncService;
2、代码
        public String getQualityProblems(String listString) {
		String msg = "";
		if (!"".equals(listString)) {
			List<Map<String, Object>> list = toListMap(listString);
			for (Map<String, Object> map : list) {
				String id = CommonTools.Obj2String(map.get("ID"));
				String F_FJ = CommonTools.Obj2String(map.get("F_FJ"));
				if (StringUtil.isNotEmpty(F_FJ)) {
					JSONArray newFiles = new JSONArray();
					JSONArray files = JSONArray.parseArray(F_FJ);
					for (int i=0; i<files.size(); i++) {
						JSONObject file = (JSONObject) files.get(i);
						String wtfj_FileName = file.get("name").toString();
						String wtfj_Url = CommonTools.Obj2String(map.get("F_wtfj_Content_"+i));
						String wtfj_Security = CommonTools.Obj2String(map.get("F_wtfj_Security_"+i));
						String wtfj_Describe = CommonTools.Obj2String(map.get("F_wtfj_Describe_"+i));
						String wtfj_Dimension = CommonTools.Obj2String(map.get("F_wtfj_Dimension_"+i));
						String wtfj_Creator = CommonTools.Obj2String(map.get("F_wtfj_Creator_"+i));
						String wtfj_CreatorId = CommonTools.Obj2String(map.get("F_wtfj_CreatorId_"+i));
						String wtfjId = this.handleFileUrl(wtfj_Url, wtfj_FileName, wtfj_Security, wtfj_Describe, 
								wtfj_Dimension, wtfj_Creator, wtfj_CreatorId);
						file.put("id", wtfjId);
						newFiles.add(file);
					}
					map.put("F_wtfj", newFiles.toString());
				}
				// 其他字段
				String XX = CommonTools.Obj2String(map.get("XX"));//密级
				//文件附件重新获取
				String wtfj = CommonTools.Obj2String(map.get("F_wtfj"));
				//更新or插入
				String sql = "select * from w_table where id = '" + id + "'";
				List<Map<String, Object>> datas = jdbcDao.queryForList(sql, null);
				if (datas.size()>0) {
					String upsql="update w_zlwtb set F_MJ='"+F_MJ+"',F_XXMC='"+F_XXMC+"' WHERE id='"+id+"'";
					jdbcDao.upd(upsql);
				} else {
					String id1=String.valueOf(UniqueIdUtil.genId());
					String zlSql = "insert into w_zlwtb "
							+ "(XX,XX) values "
							+ "("+id1+",'"+XX+"')";
					jdbcDao.upd(zlSql);
				}
				
			}
		}
		return msg;
	}
	@SuppressWarnings("unchecked")
	public static List<Map<String, Object>> toListMap(String json) {
		List<Object> list = JSON.parseArray(json);
		List<Map<String, Object>> listw = new ArrayList<Map<String, Object>>();
		for (Object object : list) {
			Map<String, Object> ret = (Map<String, Object>) object;// 取出list里面的值转为map
			listw.add(ret);
		}
		return listw;
	}
	//文件上传系统并记录数据 fileContent文件流字符串
	@SuppressWarnings("unchecked")
	public String handleFile(String fileContent, String fileName, String security, String describe, String dimension, String creator, String creatorId) {
		Long fileId = UniqueIdUtil.genId();
		try {
			InputStream is = new ByteArrayInputStream(fileContent.getBytes());
			BASE64Decoder decoder = new sun.misc.BASE64Decoder();
			byte[] content = decoder.decodeBuffer(is);
			String extName = FileOperator.getSuffix(fileName);
			String relativeFullPath =   FileOperator.generateFilenameNoSemicolon(fileName);
			// 附件保存路径
			String attachPath = AppUtil.getAttachPath();
			Calendar cal = Calendar.getInstance();
			String storePath= ""+cal.get(Calendar.YEAR)+File.separator+(cal.get(Calendar.MONTH)+1)+File.separator+cal.get(Calendar.DAY_OF_MONTH);
			String filePath = "";
			SysFile sysFile = new SysFile();
			sysFile.setFileId(fileId);
			//By weilei:添加文件上传参数:密级、描述
			if(CommonTools.isNullString(security)) {
				security = "";
			}else{
				LogThreadLocalHolder.putParamerter("resourceSecretLevel",ISysUser.SECURITY_USER_MAP.get(security));
			}
			sysFile.setSecurity(security);
			sysFile.setDescribe(describe);
			sysFile.setKeywordText("");
			sysFile.setDimension(dimension);
			//获取系统是否加密的参数
			List<SysParameter> needEncrypt = sysParameterService.getByParamName("IS_SAVE_SECURITY");
			if (needEncrypt.size() > 0 && "是".equals(needEncrypt.get(0).getParamvalue())) {
				//给文件是否加密属性设置为加密
				sysFile.setIsEncrypt(1L);
			}
			// 附件保存路径
			String saveType = PropertyUtil.getSaveType();
			if (saveType.contains("database"))
				sysFile.setFileBlob(content);
			else {
				filePath = SysFileUtil.createFilePath(attachPath+ File.separator+storePath + File.separator, relativeFullPath);
				FileOperator.writeByte(filePath, content);
			}
			// end 写入物理文件
			// 向数据库中添加数据 FileUtils
			// 附件名称
			sysFile.setFilename(fileName.substring(0, fileName.lastIndexOf('.')));
			relativeFullPath = storePath + File.separator + relativeFullPath;
			sysFile.setFilepath(relativeFullPath);  //保存相对路径
			// 上传时间
			sysFile.setCreatetime(new java.util.Date());
			// 扩展名
			sysFile.setExt(extName);
			// 字节总数
			int len = content.length;
			sysFile.setTotalBytes((long) len);
			// 说明
			sysFile.setNote("");
			sysFile.setCreatorId(Long.valueOf(creatorId));
			sysFile.setCreator(creator);
			// 总的字节数
			sysFile.setDelFlag(SysFile.FILE_NOT_DEL);
			sysFile.setParentId(sysFile.getFileId());//初始版本两值一致
			//类型
			sysFile.setProtypeId(8L);
			sysFile.setFileType("FILE");
			sysFile.setFolderid(-1L);
			sysFile.setFileatt(SysFile.FILEATT_TRUE);
			sysFile.setShared((short) 0);
			this.sysFileService.add(sysFile);
			List<SysFile> sysFiles;
			if (LogThreadLocalHolder.getParamerter("sysFiles") == null) {
				sysFiles = new ArrayList<SysFile>();
				LogThreadLocalHolder.putParamerter("sysFiles", sysFiles);
			} else {
				sysFiles = (List<SysFile>) LogThreadLocalHolder.getParamerter("sysFiles");
			}
			sysFiles.add(sysFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
        return fileId.toString();
    }
	private String handleFileUrl(String downLoadUrl, String fileName, String security, String describe, String dimension, String creator, String creatorId) {
		Long fileId = UniqueIdUtil.genId();
		try {
			// 附件保存路径
			String saveType = PropertyUtil.getSaveType();
			String msg="";//返回执行情况
			
			long typeId = -1; //globalType分类的id
			long dataId = 0; //业务表记录的id
			long tableId = 0; //业务表的id
			int maxSize=1024*1024*1024;
			String storePath = "";
			if(dataId==0 && tableId==0){
				Calendar cal = Calendar.getInstance();
				storePath= ""+cal.get(Calendar.YEAR)+File.separator+(cal.get(Calendar.MONTH)+1)+File.separator+cal.get(Calendar.DAY_OF_MONTH);
			} else {
				storePath = ""+ tableId + File.separator + dataId; //当dataId为0时都是无记录的,挂在tableId下
			} 
			
			GlobalType globalType = null;
			if(typeId>0L){
				 globalType = (GlobalType)this.globalTypeService.getById(Long.valueOf(typeId));
				 if(dataId>0){
					 SysFileType sysFileType = sysFileTypeService.getFileType(Long.valueOf(typeId),dataId);
					 globalType = new GlobalType(sysFileType);
				 }
			}
			
			Long fileTypeId = (long) -1;//folder的Id
			String fileFormates = "";//格式要求
			boolean mark = true;
			boolean fileSize=true;//文件大小符合判断
			//获取上传的文件流
			String extName = FileOperator.getSuffix(fileName);
			String fileIndex= "1";//文件位置
			
			if(mark&&fileSize){
				List<SysParameter> fastDFS = sysParameterService.getByParamName("IS_FILE_FASTDFS");
				Long id = fastDFS.get(0).getId();
				String paramvalue = fastDFS.get(0).getParamvalue();
				//生成加密或者说去除分号的文件名称(全称)
				String relativeFullPath = FileOperator.generateFilenameNoSemicolon(fileName);
				// 附件保存路径
				String attachPath = AppUtil.getAttachPath();
				String filePath = "";
				SysFile sysFile = new SysFile();
				sysFile.setFileId(fileId);
				if(!dimension.equals("")){
					//维度进行了设置、关闭文件类别
					typeId = 0L;
					globalType.setTypeId(0L);
				}
				//SysParameter fastDFS1 = fastDFS.get(0);
				//By weilei:添加文件上传参数:密级、描述
				if(CommonTools.isNullString(security)) {
					security = "";
				}else{
					LogThreadLocalHolder.putParamerter("resourceSecretLevel",ISysUser.SECURITY_USER_MAP.get(security));
				}
				sysFile.setSecurity(security);
				sysFile.setDescribe(describe);
				sysFile.setKeywordText("");
				sysFile.setDimension(dimension);
				//获取系统是否加密的参数
				List<SysParameter> needEncrypt = sysParameterService.getByParamName("IS_SAVE_SECURITY");
				if (needEncrypt.size() > 0 && "是".equals(needEncrypt.get(0).getParamvalue())) {
					//给文件是否加密属性设置为加密
					sysFile.setIsEncrypt(1L);
				}
				
				filePath = SysFileUtil.createFilePath(attachPath+ File.separator+storePath + File.separator, relativeFullPath);
				File file = this.downloadFile(downLoadUrl, attachPath+ File.separator+storePath + File.separator, relativeFullPath);
				// end 写入物理文件
				// 向数据库中添加数据 FileUtils
				// 附件名称
				sysFile.setFilename(fileName.substring(0, fileName.lastIndexOf('.')));
				
				//by liubo 根据参数判断是本地存储还是分布式文件存储
				if(StringUtil.isNotEmpty(paramvalue) && paramvalue.equals("1")){
					sysFile.setFilepath(filePath);  //保存storageServer服务器上的卷名+文件名
					sysFile.setStoreWay(1L);//by yangbo 这里存储1区分是走分布式存储的
				}else{
					relativeFullPath = storePath + File.separator + relativeFullPath;
					sysFile.setFilepath(relativeFullPath);  //保存相对路径
				}
				// 上传时间
				sysFile.setCreatetime(new java.util.Date());
				// 扩展名
				sysFile.setExt(extName);
				// 字节总数
				sysFile.setTotalBytes(file.length());
				// 说明
				sysFile.setNote("");
				sysFile.setCreatorId(Long.valueOf(creatorId));
				sysFile.setCreator(creator);
				// 总的字节数
				sysFile.setDelFlag(SysFile.FILE_NOT_DEL);
				
				//挂在业务表记录下
				if(dataId!= 0L)
					sysFile.setDataId(String.valueOf(dataId));
				if(tableId!=0L)
					sysFile.setTableId(String.valueOf(tableId));
				SysFileFolder folder = null;
				//类型
				sysFile.setProtypeId(8L);
				sysFile.setFileType("FILE");
				sysFile.setFolderid(-1L);
				sysFile.setFileatt(SysFile.FILEATT_TRUE);
				sysFile.setShared((short) 0);
				this.sysFileService.add(sysFile);
				List<SysFile> sysFiles;
				if (LogThreadLocalHolder.getParamerter("sysFiles") == null) {
					sysFiles = new ArrayList<SysFile>();
					LogThreadLocalHolder.putParamerter("sysFiles", sysFiles);
				} else {
					sysFiles = (List<SysFile>) LogThreadLocalHolder.getParamerter("sysFiles");
				}
				sysFiles.add(sysFile);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
        return fileId.toString();
	}
	/**
     * 说明:根据指定URL将文件下载到指定目标位置--2020-11-3
     * 
     * @param urlPath
     *            下载路径
     * @param downloadDir
     *            文件存放目录
     * @param fileName
     *            文件全名
     * @return 返回下载文件
     */
    @SuppressWarnings("finally")
    public static File downloadFile(String urlPath, String downloadDir,String fileName) {
        File file = null;
        try {
            // 统一资源
            URL url = new URL(urlPath);
            // 连接类的父类,抽象类
            URLConnection urlConnection = url.openConnection();
            // http的连接类
            HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
            //设置超时
            httpURLConnection.setConnectTimeout(1000*5);
            //设置请求方式,默认是GET
            httpURLConnection.setRequestMethod("POST");
            // 设置字符编码
            httpURLConnection.setRequestProperty("Charset", "UTF-8");
            // 打开到此 URL引用的资源的通信链接(如果尚未建立这样的连接)。
            httpURLConnection.connect();
            // 文件大小
            int fileLength = httpURLConnection.getContentLength();
 
            // 控制台打印文件大小
            System.out.println("您要下载的文件大小为:" + fileLength / (1024 * 1024) + "MB");
 
            // 建立链接从请求中获取数据
            URLConnection con = url.openConnection();
            BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
            // 指定文件名称(有需求可以自定义)
            String fileFullName = fileName;//全部名称--包括文件名和后缀
            // 指定存放位置(有需求可以自定义)
            String path = downloadDir + File.separatorChar + fileFullName;
            file = new File(path);
            // 校验文件夹目录是否存在,不存在就创建一个目录
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
 
            OutputStream out = new FileOutputStream(file);
            int size = 0;
            int len = 0;
            byte[] buf = new byte[2048];
            while ((size = bin.read(buf)) != -1) {
                len += size;
                out.write(buf, 0, size);
                // 控制台打印文件下载的百分比情况
                //System.out.println("下载了-------> " + len * 100 / fileLength + "%\n");
            }
            // 关闭资源
            bin.close();
            out.close();
            System.out.println("文件下载成功!");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件下载失败!");
        } finally {
            return file;
        }
    }

总结

提示:需要根据项目的实际情况,另:webservice接口不是为接口进行服务的,不必把传递文件的任务强加到webservice上,可采用FTP及其他方式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铦鹞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值