Android 如何获取我要发送的文件的内容长度?
我正在开发一个可以将数据上传到web服务器的应用程序。但我不知道我的内容长度会增加多少。我试图得到我的文件和其他文本数据的大小,我要上传,但它是不正确的。有人知道我应该在内容长度上加什么吗Android 如何获取我要发送的文件的内容长度?,android,httpurlconnection,content-length,Android,Httpurlconnection,Content Length,我正在开发一个可以将数据上传到web服务器的应用程序。但我不知道我的内容长度会增加多少。我试图得到我的文件和其他文本数据的大小,我要上传,但它是不正确的。有人知道我应该在内容长度上加什么吗 for (chunkId = 0; chunkId < chunks; chunkId++) { URL url = new URL(urlString); // Open a HTTP connection t
for (chunkId = 0; chunkId < chunks; chunkId++) {
URL url = new URL(urlString);
// Open a HTTP connection to the URL
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(20000 /* milliseconds */);
conn.setConnectTimeout(20000 /* milliseconds */);
// Allow Inputs
conn.setDoInput(true);
// Allow Outputs
conn.setDoOutput(true);
// Don't use a cached copy.
conn.setUseCaches(false);
// Use a post method.
conn.setRequestMethod("POST");
String encoded = Base64.encodeToString((_username+":"+_password).getBytes(),Base64.NO_WRAP);
conn.setRequestProperty("Authorization", "Basic "+encoded);
conn.setRequestProperty("Connection", "Keep-Alive");
//conn.setChunkedStreamingMode(mychunkSize);
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
conn.setRequestProperty("Content-Length", "**I don't know what I'm going to put here**");
conn.connect();
dos = new DataOutputStream( conn.getOutputStream() );
//dos.writeBytes("Content-Length: " + String.valueOf(size) + lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
// Send parameter #file
dos.writeBytes("Content-Disposition: form-data; name=\"fieldNameHere\";filename=\"" + mFile.getName() + "\"" + lineEnd); // filename is the Name of the File to be uploaded
dos.writeBytes("Content-Type: image/jpeg" + lineEnd);
dos.writeBytes(lineEnd);
// Send parameter #chunks
dos.writeBytes("Content-Disposition: form-data; name=\"chunk\"" + lineEnd);
dos.writeBytes(param2 + lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
// Send parameter #name
dos.writeBytes("Content-Disposition: form-data; name=\"name\"" + lineEnd);
dos.writeBytes(param3 + lineEnd);
dos.writeBytes(twoHyphens + boundary + lineEnd);
bytesAvailable = stream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = stream.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = stream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = stream.read(buffer, 0, bufferSize);
Log.i("BytesAvailable", String.valueOf(bytesAvailable));
Log.i("bufferSize", String.valueOf(bufferSize));
Log.i("buffer", String.valueOf(buffer));
}
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
stream.close();
dos.flush();
dos.close();
}
} catch (MalformedURLException ex) {
System.out.println("From CLIENT REQUEST:" + ex);
}catch (IOException ioe) {
System.out.println("From CLIENT REQUEST:" + ioe);
}catch (Exception e) {
Log.e("From CLIENT REQUEST:", e.toString());
}
for(chunkId=0;chunkId0){
写入(缓冲区,0,缓冲区大小);
bytesAvailable=stream.available();
bufferSize=Math.min(字节可用,maxBufferSize);
bytesRead=stream.read(buffer,0,bufferSize);
Log.i(“bytesavable”,String.valueOf(bytesavable));
Log.i(“bufferSize”,String.valueOf(bufferSize));
Log.i(“buffer”,String.valueOf(buffer));
}
dos.writeBytes(lineEnd);
写字节(两个连字符+边界+两个连字符+行结束);
//合流
stream.close();
dos.flush();
dos.close();
}
}捕获(格式错误){
System.out.println(“来自客户端请求:+ex”);
}捕获(ioe异常ioe){
System.out.println(“来自客户端请求:+ioe”);
}捕获(例外e){
Log.e(“来自客户端请求:,e.toString());
}
它不应该是流所能提供的字节数吗?但是,我无法从您的代码中分辨出这是从哪里来的。因此,我需要做什么才能设置我的内容类型?正如我所说的,我真的不知道,因为您没有提供流
的源。内容长度通常是在响应头上设置的,而不是在请求头上设置的