运维APP功能实现
parent
da65e70976
commit
99e09d8c69
@ -0,0 +1,142 @@
|
|||||||
|
package com.xypower.common;
|
||||||
|
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class FileUploader {
|
||||||
|
|
||||||
|
private HttpURLConnection httpConn;
|
||||||
|
private DataOutputStream request;
|
||||||
|
private final static String BOUNDARY = UUID.randomUUID().toString();;
|
||||||
|
private final static String CRLF = "\r\n";
|
||||||
|
private final static String twoHyphens = "--";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor initializes a new HTTP POST request with content type
|
||||||
|
* is set to multipart/form-data
|
||||||
|
*
|
||||||
|
* @param requestURL
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public FileUploader(String requestURL)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
// creates a unique boundary based on time stamp
|
||||||
|
URL url = new URL(requestURL);
|
||||||
|
httpConn = (HttpURLConnection) url.openConnection();
|
||||||
|
httpConn.setUseCaches(false);
|
||||||
|
httpConn.setDoOutput(true); // indicates POST method
|
||||||
|
httpConn.setDoInput(true);
|
||||||
|
|
||||||
|
httpConn.setRequestMethod("POST");
|
||||||
|
httpConn.setRequestProperty("Connection", "Keep-Alive");
|
||||||
|
httpConn.setRequestProperty("Cache-Control", "no-cache");
|
||||||
|
httpConn.setRequestProperty(
|
||||||
|
"Content-Type", "multipart/form-data;boundary=" + this.BOUNDARY);
|
||||||
|
|
||||||
|
request = new DataOutputStream(httpConn.getOutputStream());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() {
|
||||||
|
if (httpConn != null) {
|
||||||
|
try {
|
||||||
|
httpConn.disconnect();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a form field to the request
|
||||||
|
*
|
||||||
|
* @param name field name
|
||||||
|
* @param value field value
|
||||||
|
*/
|
||||||
|
public void addFormField(String name, String value) throws IOException {
|
||||||
|
request.writeBytes(this.twoHyphens + this.BOUNDARY + this.CRLF);
|
||||||
|
request.writeBytes("Content-Disposition: form-data; name=\"" + name + "\""+ this.CRLF);
|
||||||
|
request.writeBytes("Content-Type: text/plain; charset=UTF-8" + this.CRLF);
|
||||||
|
request.writeBytes(this.CRLF);
|
||||||
|
request.writeBytes(value+ this.CRLF);
|
||||||
|
request.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a upload file section to the request
|
||||||
|
*
|
||||||
|
* @param fieldName name attribute in <input type="file" name="..." />
|
||||||
|
* @param uploadFile a File to be uploaded
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void addFilePart(String fieldName, File uploadFile, String fileName, String mimeType)
|
||||||
|
throws IOException {
|
||||||
|
request.writeBytes(this.twoHyphens + this.BOUNDARY + this.CRLF);
|
||||||
|
request.writeBytes("Content-Disposition: form-data; name=\"" +
|
||||||
|
fieldName + "\";filename=\"" +
|
||||||
|
(TextUtils.isEmpty(fileName) ? uploadFile.getName() : fileName) + "\"" + this.CRLF);
|
||||||
|
if (!TextUtils.isEmpty(mimeType)) {
|
||||||
|
request.writeBytes("Content-Type: " + mimeType + "; charset=" + "UTF-8" + this.CRLF);
|
||||||
|
}
|
||||||
|
request.writeBytes(this.CRLF);
|
||||||
|
|
||||||
|
byte[] bytes = Files.readAllBytes(uploadFile.toPath());
|
||||||
|
request.write(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Completes the request and receives response from the server.
|
||||||
|
*
|
||||||
|
* @return a list of Strings as response in case the server returned
|
||||||
|
* status OK, otherwise an exception is thrown.
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public String finish() throws IOException {
|
||||||
|
String response ="";
|
||||||
|
|
||||||
|
request.writeBytes(this.CRLF);
|
||||||
|
request.writeBytes(this.twoHyphens + this.BOUNDARY +
|
||||||
|
this.twoHyphens + this.CRLF);
|
||||||
|
|
||||||
|
request.flush();
|
||||||
|
request.close();
|
||||||
|
|
||||||
|
// checks server's status code first
|
||||||
|
int status = httpConn.getResponseCode();
|
||||||
|
if (status == HttpURLConnection.HTTP_OK) {
|
||||||
|
InputStream responseStream = new
|
||||||
|
BufferedInputStream(httpConn.getInputStream());
|
||||||
|
|
||||||
|
BufferedReader responseStreamReader =
|
||||||
|
new BufferedReader(new InputStreamReader(responseStream));
|
||||||
|
|
||||||
|
String line = "";
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
|
||||||
|
while ((line = responseStreamReader.readLine()) != null) {
|
||||||
|
stringBuilder.append(line).append("\n");
|
||||||
|
}
|
||||||
|
responseStreamReader.close();
|
||||||
|
|
||||||
|
response = stringBuilder.toString();
|
||||||
|
httpConn.disconnect();
|
||||||
|
httpConn = null;
|
||||||
|
} else {
|
||||||
|
throw new IOException("Server returned non-OK status: " + status);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.xypower.common;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
public class ZipUtils {
|
||||||
|
public static void ZipFolder(File srcFile, File zipFile) {
|
||||||
|
try {
|
||||||
|
ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream(zipFile));
|
||||||
|
ZipFiles(srcFile.getParent() + File.separator, srcFile.getName(), outZip);
|
||||||
|
outZip.finish();
|
||||||
|
outZip.close();
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ZipFiles(String srcFileParentName, String srcFileName, ZipOutputStream zipOutputSteam) throws Exception {
|
||||||
|
if (zipOutputSteam == null)
|
||||||
|
return;
|
||||||
|
File file = new File(srcFileParentName + srcFileName);
|
||||||
|
|
||||||
|
if (file.isFile()) {
|
||||||
|
ZipEntry zipEntry = new ZipEntry(srcFileName);
|
||||||
|
FileInputStream inputStream = new FileInputStream(file);
|
||||||
|
zipOutputSteam.putNextEntry(zipEntry);
|
||||||
|
int len;
|
||||||
|
byte[] buffer = new byte[1024 * 256];
|
||||||
|
while ((len = inputStream.read(buffer)) != -1) {
|
||||||
|
zipOutputSteam.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
zipOutputSteam.closeEntry();
|
||||||
|
} else {
|
||||||
|
// folder
|
||||||
|
String fileList[] = file.list();
|
||||||
|
// NO sub file
|
||||||
|
if (fileList.length <= 0) {
|
||||||
|
ZipEntry zipEntry = new ZipEntry(srcFileName + File.separator);
|
||||||
|
zipOutputSteam.putNextEntry(zipEntry);
|
||||||
|
zipOutputSteam.closeEntry();
|
||||||
|
}
|
||||||
|
//
|
||||||
|
for (int i = 0; i < fileList.length; i++) {
|
||||||
|
ZipFiles(srcFileParentName + srcFileName + "/", fileList[i], zipOutputSteam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue