การคัดลอกรหัสมีดังนี้:
เครื่องมือแพ็คเกจ;
นำเข้า java.io.bufferedreader;
นำเข้า Java.io.File;
นำเข้า Java.io.FileInputStream;
นำเข้า java.io.filenotfoundException;
นำเข้า Java.io.InputStream;
นำเข้า Java.io.InputStreamReader;
นำเข้า Java.io.OutputStream;
นำเข้า java.net.inetaddress;
นำเข้า java.net.socket;
นำเข้า java.net.url;
นำเข้า java.util.map;
นำเข้า Android.util.log;
-
* อัปโหลดไฟล์
-
Formfile ชั้นเรียนสาธารณะ {
สตริงคงสุดท้ายส่วนตัว logkey = "FormFile";
/** อัปโหลดข้อมูลไฟล์*/
ไบต์ส่วนตัว [] ข้อมูล;
Inputstream Istream ส่วนตัว;
ไฟล์ไฟล์ส่วนตัว
/** ชื่อไฟล์*//
ภาพยนตร์สตริงส่วนตัว;
/** ชื่อพารามิเตอร์คำขอ*/
ชื่อพารามิเตอร์สตริงส่วนตัว;
/** ประเภทเนื้อหา*/
สตริงส่วนตัว contentType = "แอปพลิเคชัน/อ็อกเท็ต-สตรีม";
-
-
* @param filmname
* ชื่อไฟล์
* ข้อมูล @param
* อัปโหลดข้อมูลไฟล์
* @param parametername
* พารามิเตอร์
* @param ContentType
* ประเภทเนื้อหา
-
Formfile สาธารณะ (String FilmName, BYTE [] ข้อมูล, พารามิเตอร์สตริง, ชื่อ,
String ContentType) {
this.data = ข้อมูล;
this.filName = FilmName;
this.parameterName = parameterName;
ถ้า (ContentType! = null)
this.contentType = contentType;
-
-
-
* @param filmname
* ชื่อไฟล์
* ไฟล์ @param
* อัปโหลดไฟล์
* @param parametername
* พารามิเตอร์
* @param ContentType
* ประเภทเนื้อหา
-
Public FormFile (String FilmName, ไฟล์ไฟล์, พารามิเตอร์สตริง
String ContentType) {
this.filName = FilmName;
this.parameterName = parameterName;
this.file = ไฟล์;
พยายาม {
this.instream = ใหม่ fileInputStream (ไฟล์);
} catch (filenotfoundexception e) {
E.PrintStackTrace ();
-
ถ้า (ContentType! = null)
this.contentType = contentType;
-
ไฟล์สาธารณะ getFile () {
ส่งคืนไฟล์;
-
Public InputStream getInstream () {
กลับเป็นเครื่องมือ;
-
ไบต์สาธารณะ [] getData () {
ส่งคืนข้อมูล
-
สตริงสาธารณะ getFilName () {
คืนชื่อภาพยนตร์;
-
โมฆะสาธารณะ setFilName (String FilmName) {
this.filName = FilmName;
-
สตริงสาธารณะ getParameterName () {
คืนชื่อพารามิเตอร์;
-
โมฆะสาธารณะ setParametERNAME (พารามิเตอร์สตริง) {
this.parameterName = parameterName;
-
สตริงสาธารณะ getContentType () {
ส่งคืน ContentType;
-
โมฆะสาธารณะ setContentType (String ContentType) {
this.contentType = contentType;
-
private String operatype = null;
โมฆะสาธารณะ setoper (สตริง operatype) {
this.operType = opertype;
-
โพสต์บูลีนสาธารณะ (เส้นทางสตริง, แผนที่ <สตริง, สตริง> พารามิเตอร์)
โยนข้อยกเว้น {
Final String Boundary = "-------------- 7DA2137580612";
สตริงสุดท้าย endline = "-" + ขอบเขต + "-/r/n"; // ธงปลายข้อมูลข้อมูล
int filedatalength = 0;
// รับความยาวทั้งหมดของข้อมูลประเภทไฟล์
StringBuilder fileExplain = new StringBuilder ();
fileexplain.append ("-");
Fileexplain.append (ขอบเขต);
fileexplain.append ("/r/n");
fileexplain.append ("เนื้อหา-การจัดสรร: form-data; name =" "
+ getParameterName () + "/"; filename =/"" + getFilName ()
+ "/"/r/n ");
fileexplain.append ("เนื้อหาประเภท:" + getContentType () + "/r/n/r/n");
fileexplain.append ("/r/n");
FileDatalength += FileExplain.length ();
if (getInstream ()! = null) {
FileDatalength += getFile (). ความยาว ();
} อื่น {
Filedatalength += getData (). ความยาว;
-
StringBuilder textEntity = new StringBuilder ();
สำหรับ (map.entry <string, string> รายการ: params.entryset ()) {// สร้างข้อมูลเอนทิตีของพารามิเตอร์ประเภทข้อความ
TextEntity.Append ("-");
Textentity.Append (ขอบเขต);
textentity.append ("/r/n");
TextEntity.Append ("Content-Disposition: Form-Data; name =/" "
+ entry.getKey () + "/"/r/n/r/n ");
TextEntity.Append (entry.getValue ());
textentity.append ("/r/n");
-
log.v (logkey, textentity.toString ());
// คำนวณความยาวทั้งหมดของข้อมูลเอนทิตีที่ส่งไปยังเซิร์ฟเวอร์
int datalength = textentity.toString (). getBytes (). ความยาว
+ Filedatalength + Endline.getBytes (). ความยาว;
url url = url ใหม่ (เส้นทาง);
log.v (logkey, url.toString ());
int port = url.getport () == -1? 80: url.getport ();
ซ็อกเก็ตซ็อกเก็ต = ซ็อกเก็ตใหม่ (inetaddress.getByName (url.getHost ()), พอร์ต);
OutputStream Outstream = Socket.GetOutputStream ();
// ส่วนหัวคำขอ HTTP ถูกส่งไปด้านล่าง
String requestMethod = "post" + url.getPath () + "?" + opertype + "http/1.1/r/n";
log.v (logkey, requestmethod);
Outstream.write (requestMethod.getBytes ());
String Accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms- XBAP, Application/X-MS-Application, Application/Vnd.ms-Excel, Application/Vnd.ms-Powerpoint, Application/Msword, */ */r/n ";
Outstream.write (accept.getBytes ());
string language = "ยอมรับภาษา: zh-cn/r/n";
Outstream.write (language.getBytes ());
String ContentType = "เนื้อหาประเภท: multipart/form-data; boundary ="
+ ขอบเขต + "/r/n";
Outstream.write (ContentType.getBytes ());
String ContentLength = "ความยาวเนื้อหา:" + datalength + "/r/n";
Outstream.write (contentLength.getBytes ());
String Alive = "การเชื่อมต่อ: Keep-Alive/R/N";
Outstream.write (live.getBytes ());
สตริงโฮสต์ = "โฮสต์:" + url.getHost () + ":" + พอร์ต + "/r/n";
Outstream.write (host.getBytes ());
// หลังจากเขียนส่วนหัวคำขอ HTTP ให้เขียนการคืนรถและการแบ่งสายตามโปรโตคอล HTTP
Outstream.write ("/r/n" .getBytes ());
// ส่งข้อมูลเอนทิตีประเภทข้อความทั้งหมด
Outstream.write (textentity.toString (). getBytes ());
// ส่งข้อมูลเอนทิตีทุกประเภทไฟล์
StringBuilder fileEntity = new StringBuilder ();
fileentity.append ("-");
fileentity.append (ขอบเขต);
fileentity.append ("/r/n");
FileEntity.Append ("Content-Disposition: Form-Data; name =/" "
+ getParameterName () + "/"; filename =/"" + getFilName ()
+ "/"/r/n ");
fileentity.append ("เนื้อหาประเภท:" + getContentType () + "/r/n/r/n");
Outstream.write (fileentity.toString (). getBytes ());
if (getInstream ()! = null) {
ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024];
int len = 0;
ในขณะที่ ((len = getInstream () อ่าน (บัฟเฟอร์, 0, 1024))! = -1) {
Outstream.write (บัฟเฟอร์, 0, len);
-
getInstream (). ปิด ();
} อื่น {
Outstream.write (getData (), 0, getData (). ความยาว);
-
Outstream.write ("/r/n" .getBytes ());
// ธงข้อมูลปลายข้อมูลถูกส่งไปด้านล่างเพื่อระบุว่าข้อมูลสิ้นสุดลง
Outstream.write (endline.getBytes ());
bufferedReader reader = ใหม่ bufferedReader (ใหม่ inputStreamReader (socket.getInputStream ()));
if (reader.readline (). indexof ("200") == -1) {// อ่านข้อมูลที่ส่งคืนโดยเว็บเซิร์ฟเวอร์และตรวจสอบว่ารหัสคำขอคือ 200 ถ้าไม่ใช่ 200 หมายความว่าคำขอ ล้มเหลว
กลับเท็จ;
-
Outstream.flush ();
Outstream.close ();
reader.close ();
Socket.close ();
กลับมาจริง;
-
-
// รหัสทดสอบ
file IconFile = ไฟล์ใหม่ ("PATH FILE");
string url = "htttp: //192.168.1.101: 8080/app/initservlet";
แผนที่ <string, string> map = new hashmap <string, string> (); // เนื้อหาฟอร์ม
map.put ("ชื่อ", "บล็อก");
if (iconfile! = null) {
formfile uploadfile = new FormFile (iconfile.getName ()
Iconfile, "IconFile", "Image/JPEG");
uploadfile.setoper ("action = insertUSR"); // แทรก? action = insertUSR บน URL
พยายาม {
บูลีน isok = uploadfile.post (url, แผนที่);
} catch (Exception e) {
// todo catch block ที่สร้างอัตโนมัติ
E.PrintStackTrace ();
-