package top.mengmei219.upload;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import top.mengmei219.upload.util.MimeTypeUtil;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Context mContext;
LinearLayout ll_progressLayout;
ProgressBar progress;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.obj!=null && (msg.obj instanceof String)) {
Toast.makeText(mContext, (String) msg.obj, Toast.LENGTH_SHORT).show();
}
//TODO: 这里应该加个动画,慢慢消失
ll_progressLayout.removeAllViews();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
findViewById(R.id.btn_upload).setOnClickListener(this);
ll_progressLayout = (LinearLayout) findViewById(R.id.ll_progressLayout);
}
@Override
public void onClick(View v) {
//加载进度条
progress = (ProgressBar) View.inflate(mContext, R.layout.child_progress, null);
ll_progressLayout.addView(progress);
EditText et = (EditText) findViewById(R.id.et_filePath);
final String filePath = et.getText().toString().trim();
//开启子线程上传
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://192.168.1.104:8080/itheima74/servlet/UploaderServlet");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setConnectTimeout(1000 * 10);
//文件上传请求头
String BOUNDARY = "----WebKitFormBoundarylsvivlBHRlZ8ppnO";
urlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
//上传请求体
urlConnection.setDoOutput(true);
OutputStream out = urlConnection.getOutputStream();
File file = new File(filePath);
String filename = file.getName();
String mimeType = MimeTypeUtil.getMimeType(file);
//请求体(首)
StringBuffer sb = new StringBuffer();
sb.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
sb.append("Content-Disposition: form-data; name=\"" + filePath + "\"; filename=\"" + filename + "\"\r\n");
sb.append("Content-Type:" + mimeType + "\r\n\r\n");
out.write(sb.toString().getBytes());
if (file.exists() && file.isFile()) {
//设置进度条总刻度
progress.setMax(((int) file.length()));
progress.setProgress(0);
//请求体(中)
FileInputStream in = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
Thread.sleep(5); //慢观进度条
progress.setProgress(progress.getProgress() + len);
}
in.close();
}
//请求体(尾)
byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
//处理结果
Message msg = Message.obtain();
int code = urlConnection.getResponseCode();
if (code == 200) {
msg.obj = "上传成功";
} else {
msg.obj = "上传失败";
}
mHandler.sendMessage(msg);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
萌萌哒-上传
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 双台风? 怎么飙得上三大男高音! (从左至右)多明戈、卡雷拉斯和帕瓦罗蒂 如果你不认识他们, 那么,你的音乐课一定...
- 从青春期开始,男孩女孩就有了懵懵懂懂的爱,在似懂非懂之间,憧憬着,向往着美好的爱情;这时的爱情就像一朵快要含苞待放...
- 谷歌都撤离了,谷歌食堂呢? 当然跟着回娘家了...... 故事断送于北京五道口清华科技园的科建大厦顶部,一场主题为...