是否有任何使用NDK將文件從SD上傳到服務器的源代碼?或任何其他方法上傳一個大尺寸的文件沒有得到Android NDK:使用NDK上傳文件
Out Of Memory Exception
如果是這樣,請給我提供鏈接?
下面的代碼是我使用的一個,我得到了內存溢出異常
private void UploadFileByClient(LocalFileVO localFileVO){
try{
File uploadFile = new File(
(localFileVO.getFolderPath() + "/" + localFileVO.getFileName()));
HttpClient client = new DefaultHttpClient();
final HttpResponse resp;
final HttpClient httpClient = new DefaultHttpClient();
final HttpPut post = new HttpPut("https://qa2-talos-vip-mexico.symnds.com/fileservice/files/");
post.setHeader("User-Agent", "Mexico/1.0.0.57/android");
post.setHeader("Content-Type", localFileVO.getMimeType());
post.setHeader("Authorization", TOKEN);
post.setHeader("x-mexico-endpointid", GUID);
post.setHeader("x-mexico-filehash", localFileVO.getFileHash());
post.setHeader("x-mexico-filesize", localFileVO.getSize());
if (!TextUtils.equals("0", localFileVO.getFolderId()))
post.setHeader("x-mexico-folder", localFileVO.getFolderId());
post.setHeader("x-mexico-filename", localFileVO.getEncodedFileName());
post.setHeader("Expect", "100-continue");
post.setHeader("x-mexico-modtime",
String.valueOf(System.currentTimeMillis()/1000));
// ParcelFileDescriptor fileDescriptor = this.getContentResolver().openFileDescriptor(Uri.parse(uploadFile.getAbsolutePath()), "r");
// InputStream in = this.getContentResolver().openInputStream(Uri.parse(uploadFile.getAbsolutePath()));
InputStream in = new FileInputStream(uploadFile);
CountingInputStreamEntity entity = new CountingInputStreamEntity(in, uploadFile.length());
entity.setUploadListener(this);
post.setEntity(entity);
resp = httpClient.execute(post);
if (resp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
System.out.println("=======================Got the response from server============================");
}
}catch(Exception e){
System.out.println("==============Failed using HttpClient================="+e.getMessage());
}
}
private int uploadFile(LocalFileVO localFileVO) throws IOException {
UploadFileByClient(localFileVO);
if(true){
return 0;
}
File uploadFile = new File((localFileVO.getFolderPath() + "/" + localFileVO.getFileName()));
System.setProperty("http.keepAlive", "false");
int code = 0;
try{
HttpURLConnection urlConnection;
URL url = new URL("https://qa2-talos-vip-mexico.symnds.com/fileservice/files/");
// URL url = new URL("https://zpi.nortonzone.com/fileservice/files/");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(30000);
urlConnection.setRequestProperty("Host", url.getHost());
// urlConnection.setRequestProperty("Connection", "Keep-Alive");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setInstanceFollowRedirects(false);
// urlConnection.setChunkedStreamingMode(1024);
urlConnection.setFixedLengthStreamingMode(Integer.parseInt(localFileVO.getSize()));
//urlConnection.setChunkedStreamingMode(1024);
urlConnection.setRequestMethod("PUT");
urlConnection.setRequestProperty("User-Agent", "Mexico/1.0.0.57/android");
urlConnection.setRequestProperty("Content-Type", localFileVO.getMimeType());
//urlConnection.setRequestProperty("Content-Length", localFileVO.getSize());
urlConnection.setRequestProperty("Authorization", TOKEN);
urlConnection.setRequestProperty("x-mexico-endpointid", GUID);
urlConnection.setRequestProperty("x-mexico-filehash", localFileVO.getFileHash());
//urlConnection.setRequestProperty("x-mexico-filesize", localFileVO.getSize());
if (!TextUtils.equals("0", localFileVO.getFolderId()))
urlConnection.setRequestProperty("x-mexico-folder", localFileVO.getFolderId());
urlConnection.setRequestProperty("x-mexico-filename", localFileVO.getEncodedFileName());
urlConnection.setRequestProperty("Expect", "100-continue");
urlConnection.setRequestProperty("x-mexico-modtime",
String.valueOf(System.currentTimeMillis()/1000));
bufferOutputStream = new BufferedOutputStream(urlConnection.getOutputStream(),BSIZE);
// CountingOutputStream cOutStream = new CountingOutputStream(bufferOutputStream);
FileInputStream fileInputStream = new FileInputStream(uploadFile);
long startTime = System.currentTimeMillis();
try{
int totalSize = 0;
while (true) {
synchronized (chunks) {
int amountRead = fileInputStream.read(chunks);
System.out.println("========amount read========="+amountRead);
if (amountRead == -1) {
break;
}
bufferOutputStream.write(chunks, 0, amountRead);
bufferOutputStream.flush();
}
}
System.out.println("================================TotalSize " + totalSize);
bufferOutputStream.flush();
bufferOutputStream.close();
fileInputStream.close();
}catch(Exception e){
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("=============================================Writing time ==========================================================" + (endTime - startTime));
//code = urlConnection.getResponseCode();
InputStream inputStream = urlConnection.getInputStream();
long endTime1 = System.currentTimeMillis();
System.out.println("Time to get the response is " + (endTime1 - endTime));
// progressBar.setProgress(100);
System.out.println("=================Response code is ================="+code);
urlConnection.disconnect();
//fileInputStream.close();
}catch(Exception e){
System.out.println("========================Exception occured=================="+e.getMessage());
}
return code;
}
感謝ü
而且,你到目前爲止嘗試過了什麼? – Lucifer
我試過使用SDK ie Fileinputstream和bufferedoutputstream來讀寫。使用這個只有我得到了** OUT OF MEMORY EXCEPTION **(試圖上傳20MB zip文件) – Sudarshan
好,您應該上傳該代碼,以便我們可以幫助您更好的親愛的:) – Lucifer