Java通过HTTP方式传输文件

最近再做项目的过程中又遇到通过HTTP方式上传文件的需求,想起来之前有实现过这个功能,只是时间太长不记得了,担心下次再忘于是就有了下面这篇文章。

先贴段客户端这边的代码吧

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;

import com.dianping.cat.Cat;

public class FileLoadClient {
	
	private static final int TIMEOUT = 5000;
	
	public static String fileload(String url, File file) {
        String body = "{}";
        
        if (url == null || url.equals("")) {
            return "illegal";
        }
        if (!file.exists()) {
            return "file not exist";
        }
        
        PostMethod postMethod = new PostMethod(url);
        BufferedReader br = null;
        try {            
            // FilePart:用来上传文件的类,file即要上传的文件
            FilePart fp = new FilePart("file", file);
            Part[] parts = { fp };

            // 对于MIME类型的请求,httpclient建议全用MulitPartRequestEntity进行包装
            MultipartRequestEntity mre = new MultipartRequestEntity(parts, postMethod.getParams());
            postMethod.setRequestEntity(mre);
            
            HttpClient client = new HttpClient();
            // 由于要上传的文件可能比较大 , 因此在此设置最大的连接超时时间
            client.getHttpConnectionManager().getParams() .setConnectionTimeout(TIMEOUT);
            int status = client.executeMethod(postMethod);
            if (status == HttpStatus.SC_OK) {
                InputStream inputStream = postMethod.getResponseBodyAsStream();
                br = new BufferedReader(new InputStreamReader(inputStream));
                StringBuffer stringBuffer = new StringBuffer();
                String str = "";
                while ((str = br.readLine()) != null) {
                    stringBuffer.append(str);
                }                
                body = stringBuffer.toString();                
            } else {
                body = "fail";
            }
        } catch (Exception e) {
            Cat.logError(e);
        } finally {
        	if (br != null)
				try {
					br.close();
				} catch (IOException e) {
					Cat.logError(e);
				}
            // 释放连接
            postMethod.releaseConnection();
        }        
        return body;
    }    
}

服务器端接收文件的代码如下:

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public String uploadFile(HttpServletResponse response, @RequestParam("file") MultipartFile file) {
        if (file != null && !file.isEmpty()) {
            try {
                String filePath = file.getOriginalFilename();
                InputStream inputStream = null;
                FileOutputStream outputStream = null;
                try {
                    inputStream = file.getInputStream();
                    File f = new File(filePath);
                    f.createNewFile();
                    byte[] bom = new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
                    outputStream = new FileOutputStream(f);
                    if (filePath.endsWith(".txt")) {
                        outputStream.write(bom);//写入BOM头
                    }
                    byte temp[] = new byte[1024];
                    int size = -1;
                    while ((size = inputStream.read(temp)) != -1) { // 每次读取1KB,直至读完
                        outputStream.write(temp, 0, size);
                    }
                    response.getWriter().write("upload success");
                } catch (IOException e) {
                    return e.getMessage();
                } finally {
                    outputStream.close();
                    inputStream.close();
                }
            } catch (Exception e) {
                return e.getMessage();
            }
        }
        return "File is Empty";
    }

 

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java超市管理系统压缩包是指将Java超市管理系统的相关文件和代码打包成一个压缩文件的形式,方便进行存储、传输和共享。 Java超市管理系统是一种通过Java语言编写的软件,用于方便管理和操作超市日常运营的各个方面,包括库存管理、销售统计、进货管理、员工管理等等。该系统的目标是提高超市管理的效率和准确性。 压缩包的形式可以将Java超市管理系统的所有相关文件和代码整合在一起,包括主程序文件、配置文件、数据库文件、图像资源文件等等。压缩包可以采用常见的压缩格式,如ZIP、RAR等,以便于存储和传输。 使用压缩包能够提供一种简单而有效的方式来备份和分享Java超市管理系统。压缩包可以包含系统的所有必需文件,可以方便地在不同的计算机上进行部署和安装。同时,压缩包也减少了传输过程中的数据量,减少了传输时间和成本。 当使用Java超市管理系统时,可以先将压缩包解压缩到目标计算机上,然后按照说明进行安装和配置,最后启动系统即可。在开发和维护过程中,可以将系统的不同版本和更新以压缩包的形式进行备份和归档,方便进行版本管理和回溯。 总而言之,Java超市管理系统压缩包是将Java超市管理系统的相关文件和代码打包成一个压缩文件的形式,以方便存储、传输和共享。压缩包可以提供系统备份、部署和传输的便利性,是管理和使用Java超市管理系统的一种有效方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值