このコードを使用してサーバーにファイルをアップロードしていますが、そのような機能が必要です。プロセス中にネットワークが失われたり、その他の中断が発生したために停止した場合、最初からアップロードを開始するべきではありません。サーバーからの応答もカスタマイズ可能です。アンドロイドで可能ですか?これを行うにはどのようなアプローチを使用する必要がありますか? 私を導いてください。可能であれば、サンプルコードを提案してください。
ありがとう!
public String uploadFile(InputStream is) {
HttpURLConnection conn;
String jsonResponse = "";
int streamSize = 0;
DataOutputStream dos = null;
DataInputStream inStream = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesAvailable, bufferSize;
byte[] buffer;
String urlString = "*******<My URL>*******";
try {
// ------------------ CLIENT REQUEST
// FileInputStream fileInputStream = new FileInputStream(new
// File(selectedPath) );
// open a URL connection to the Servlet
URL url = new URL(urlString);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
conn.setUseCaches(false);
conn.setChunkedStreamingMode(0);
// Use a post method.
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"wheeze_file\";filename="
+ fileName + lineEnd);
dos.writeBytes(lineEnd);
// create a buffer of maximum size
bytesAvailable = is.available();
streamSize = bytesAvailable;
bufferSize = 2048;
buffer = new byte[bufferSize];
// read file and write it into form...
int i = 0;
int length = 0;
while ((length = is.read(buffer, 0, bufferSize)) > 0) {
if (isCancelled()) {
Toast.makeText(getApplicationContext(), "Cancelled",
Toast.LENGTH_SHORT).show();
return null;
}
dos.write(buffer, 0, length);
bytesAvailable = is.available();
// bufferSize = Math.min(bytesAvailable, maxBufferSize);
publishProgress(streamSize, bytesAvailable);
// Log.v("Progress",""+streamSize+" : "+bytesAvailable);
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"data[authentication][email]\""
+ lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(username);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"data[authentication][password]\""
+ lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(enc_password);
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"method\""
+ lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes("uploadWheezeFile");
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
Log.e("Debug", "File is written");
// Log.v("Conn status", "Disconnected");
} catch (MalformedURLException ex) {
ex.printStackTrace();
Log.e("Debug", "MURLExerror: " + ex.getMessage(), ex);
} catch (IOException ioe) {
ioe.printStackTrace();
Log.e("Debug", "IOEx error: " + ioe.getMessage(), ioe);
uploadTask.cancel(true);
return null;
} finally {
try {
is.close();
dos.flush();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// ------------------ read the SERVER RESPONSE
try {
inStream = new DataInputStream(conn.getInputStream());
if ((jsonResponse = inStream.readLine()) != null) {
Log.e("Debug", "Server Response " + jsonResponse);
} else {
jsonResponse = "";
}
inStream.close();
conn.disconnect();
//
} catch (IOException ioex) {
ioex.printStackTrace();
Log.e("Debug", "error: " + ioex.getMessage(), ioex);
}
return jsonResponse;
}