java 上传文件

论坛 期权论坛 脚本     
匿名技术用户   2021-1-9 16:58   444   0

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import net.sf.json.JSONObject;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

------------------第一种上传方法开始------------------------

private static HttpClientResult finaldoUpload(String url, InputStream in, String filename) throws ClientProtocolException, IOException{
CloseableHttpClient httpclient = null;
try {
httpclient = HttpClients.createDefault();
HttpPost post = new HttpPost(url);

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
//第一个参数为 相当于 Form表单提交的file框的name值 第二个参数就是我们要发送的InputStream对象了
//第三个参数是文件名
builder.addBinaryBody("file", in, ContentType.create("multipart/form-data"), filename);
//构建请求参数 普通表单项
// StringBody stringBody = new StringBody("12",ContentType.MULTIPART_FORM_DATA);
// builder.addPart("id",stringBody);

HttpEntity entity = builder.build();
post.setEntity(entity);

// 执行post请求.
CloseableHttpResponse response = httpclient.execute(post);
try {
if (response.getStatusLine().getStatusCode() == 200) {
// 获取响应实体
HttpEntity res = response.getEntity();
if (res != null) {
return JsonUtils.parseObject(EntityUtils.toString(res, Charset.forName("UTF-8")), HttpClientResult.class);
}
}
} finally {
response.close();
}
} finally {
// 关闭连接,释放资源
try {
if (httpclient != null) httpclient.close();
} catch (IOException e) {}
}
return null;
}

------------------第一种上传方法结束------------------------

以下为第二种上传方法

public static final String BOUNDARY="XVUJTZYEEE";
public static final String LINE_END="\r\n";
public static final String PREFIX="--";

/**上传文件,并将上传结构转为string*/
public static String upfile(String serviceUrl,InputStream fileStream,String fileName){
HttpURLConnection conn = null;
DataOutputStream out=null;
try {
URL url = new URL(serviceUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(1000000); // 连接的超时时间
conn.setReadTimeout(1000000); // 读数据的超时时间
conn.setDoOutput(true); // 必须设置此方法, 允许输出
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Charset", "UTF-8");

conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);

out = new DataOutputStream(conn.getOutputStream());
StringBuffer strBuf = new StringBuffer();
strBuf.append(PREFIX);
strBuf.append(BOUNDARY);
strBuf.append(LINE_END);
strBuf.append("Content-Disposition: form-data; name=\"multipartFile\"; filename=\"" + fileName + "\"" + LINE_END).append(LINE_END);

out.write(strBuf.toString().getBytes());
int bytes=0;
byte[] bufferOut = new byte[10240];
while((bytes=fileStream.read(bufferOut))!=-1){
out.write(bufferOut, 0, bytes);
}
out.write(LINE_END.getBytes());
out.write((PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes());
out.flush();
int responseCode = conn.getResponseCode();
if(responseCode == 200) {
InputStream is = conn.getInputStream();
String content = getStringFromInputStream(is);
logger.error("--------------文件上传结果"+content);
return content;
}else{
logger.error("--------------文件上传返回码"+responseCode);
}
} catch (Exception e) {
logger.error("文件上传失败",e);
return null;
} finally {
if(conn != null) {
conn.disconnect();
}
if(fileStream!=null){
try {
fileStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(out!=null){
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}

private static String getStringFromInputStream(InputStream is){
String result =null;
ByteArrayOutputStream baos =null;
try{
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[10240];
int len = -1;
while((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
result = baos.toString();
}catch(Exception e){
logger.error("获取结果失败",e);
}finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(baos!=null){
try {
baos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP