マイアップロードコード:アップロードファイル
String end = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
try {
URL url = new URL(ActionUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Accept", "text/*");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data;" + "name=\"folder\"" + end + end);
ds.write(SavePath.getBytes("UTF-8"));
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data;" + "name=\"Filedata\"; filename=\"");
ds.write(FileName.getBytes("UTF-8"));
ds.writeBytes("\"" + end);
ds.writeBytes(end);
FileInputStream fStream = new FileInputStream(uploadFilepath+""+FileName);
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int length = -1;
int pro = 0;
while((length = fStream.read(buffer)) != -1) {
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
fStream.close();
ds.flush();
InputStream is = con.getInputStream();
int ch;
StringBuffer b = new StringBuffer();
while((ch = is.read()) != -1) {
b.append((char)ch);
}
ds.close();
}
catch(Exception e) {
e.printStackTrace();
}
小さなファイルをアップロードしながら、それが動作することができます。 しかし、16MB以上になるとアップロードが失敗し、OutOfMemoryエラーが表示されます。 バッファ内にすべてのデータを置くことが原因だと思います。 バッファを1024バイト保存しながらデータを送信するようにしたいと思います。 しかし、私はそれをする考えはありません。 誰かが私にそれを手伝ってもらえますか?
あなたは(ds.flushを追加してみてください可能性があり)。 while((length = fStream.read(buffer))!= -1){ ds.write(バッファ、0、長さ);サーバーにすべてのデータをフラッシュすることができるようにします(サーバーがds.writeBytes(twoHyphens + boundary + twoHyphens + end);まで呼び出されるまで待つと仮定しています) –
私は試してみました。それでも、同じ行で同じエラーが発生します。 – brian