MultipartEntity上传下载文件

本文介绍了一个简单的文件上传和下载机制。上传部分通过HTTP客户端发送文件数据到远程服务器,下载部分则接收请求并保存文件到本地目录。涉及HTTP请求、多部分解析及文件处理等关键技术。

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

1,上传端

 private boolean uploadPackage(HttpClient httpClient, byte[] byteBuffer, long[] pos) {
        SwingLog.info(TAG, "uploadPackage  start...");
        final String remoteUrl =  this.targetURL+ REMOTE_POST_PATH; //getModemLogServerURL() + REMOTE_POST_PATH;  ---测试使用,暂时写死
        final HttpPost httpPost = new HttpPost(remoteUrl);
        
        ContentBody contentBody = new ByteArrayBody(byteBuffer,this.fileName);
        MultipartEntity reqEntity = new MultipartEntity();
        reqEntity.addPart("test", contentBody);
        httpPost.setEntity(reqEntity);
          response = httpClient.execute(httpPost);
            HttpEntity responseEntity = response.getEntity();
            }

2,下载端

private boolean saveFile(HttpServletRequest request, FileInfo fileInfo,
			FileSaveHandle handle) {
		try {
			if (request.getCharacterEncoding() == null) {
				// 设置编码格式
				request.setCharacterEncoding("UTF-8");
			}

			String storeFileDir = fileInfo.getSavePath();
			File fileDir = new File(storeFileDir);
			if (!fileDir.isDirectory()) {
				// 不存在则新建文件夹
				if (!fileDir.mkdirs()) {
					logger.info("Create dirs ERROR!");
				}
			}

			String path = StringUtils.EMPTY;
			long startTime = System.currentTimeMillis();
			// 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
			CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
					request.getSession().getServletContext());
			// 检查form中是否有enctype="multipart/form-data"
			if (multipartResolver.isMultipart(request)) {
				// 将request变成多部分request
				MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
				// 获取multiRequest 中所有的文件名
				Map<String, MultipartFile> multifiles = multiRequest
						.getFileMap();
				for (Map.Entry<String, MultipartFile> fileEntry : multifiles
						.entrySet()) {
					// 一次遍历所有文件
					MultipartFile multipartFile = fileEntry.getValue();
					if (multipartFile != null) {
						String filename = multipartFile.getOriginalFilename();
						if (StringUtils.isNotBlank(filename)) {
							// 用于提取任务名
							path = storeFileDir + File.separator + filename;

							return handle.process(multipartFile, fileInfo,
									filename, path, startTime);
						}

					}
				}
				logger.debug("saveFile end......");
				return true;
			} else {
				logger.warn("The enctype is not 'multipart/form-data'!");
				return false;
			}
		} catch (Exception e) {
			logger.error("save file with exception:" + e.getMessage());
			return false;
		}

	}
	//保存方法
	@Override
			public boolean process(MultipartFile multipartFile,
					FileInfo fileInfo, String filename, String path,
					long startTime) {
				try {
					byte[] bytes = multipartFile.getBytes();
					// 随机写入字节流到指定文件
					if (!randomWriteFile(path, bytes)) {
						logger.error("randomWriteFile failed !");
						return false;
					}

					long endTime = System.currentTimeMillis();
					logger.info(String
							.format("Success to save the file[%s] to the path[%s] spend [%s]ms.",
									filename, path, endTime - startTime));
					return true;
				} catch (Exception e) {
					logger.error("FileSaveHandle Error: " + e.getMessage());
					return false;
				}
			}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值