gpt4 book ai didi

Android上传大文件

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:44 25 4
gpt4 key购买 nike

我是 Android 开发的新手,我正在尝试将大小为 25 到 50 MB 的文件上传到 Web 服务器,但出现内存不足错误。过去 2 天我一直在苦苦挣扎,不知道哪里出了问题。

对我出错的地方有什么建议吗?

我正在处理的代码是

private FileInputStream fileInputStream = null;
private int bytesavailable,buffersize,bytesRead ;
byte buff[];
int maxBufferSize = 1*1024*1024;
String server_url ="server_url";
DataOutputStream dos;
String Builder response = new String Builder();
String body = "boundary values";
String body2 = "Boundary values";
URL url = null;
try
{
url = new URL(server_url);
}
catch (MalformedURLException e1)
{
e1.printStackTrace();
}

HttpURLConnection conn = null;
try
{
conn = (HttpURLConnection) url.openConnection();
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Connection","Keep-Alive");
conn.setRequestProperty("Content-Type","multipart/form-data; boundary=A300x");
conn.connect();
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(body);
File inputfile = new File(sourceFile);
fileInputStream = new FileInputStream(inputfile);


bytesavailable = fileInputStream.available();
buffersize = Math.min(bytesavailable, maxBufferSize);
buff = new byte[buffersize];
bytesRead = fileInputStream.read(buff, 0, buffersize);


while (bytesRead > 0)
{

dos.write(buff, 0, buffersize);
dos.flush();
bytesavailable = fileInputStream.available();
buffersize = Math.min(bytesavailable, maxBufferSize);
bytesRead = fileInputStream.read(buff, 0, buffersize);
}
fileInputStream.close();
dos.write("\r\n".getBytes());
dos.write(body2.getBytes());
dos.flush();
dos.close();
}
catch (ProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
int iresponse = 0;
try
{
iresponse = conn.getResponseCode();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//printStream(conn.getInputStream());

if (iresponse == HttpURLConnection.HTTP_OK)
{

BufferedReader input = null;
try
{
input = new BufferedReader(new InputStreamReader(conn.getInputStream()), 8192);
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}

String line = null;
try
{
while ((line = input.readLine()) != null)
response.append(line);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

try
{
input.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}


return response.toString();

最佳答案

这可能会有帮助。

private void uploadFile(File file) throws IOException {
Log.i(TAG, "Uploading " + file);
String videoName = file.getParentFile().getName();

AndroidHttpClient httpclient = AndroidHttpClient.newInstance(GoProLive.TAG);
try {
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), ConnectTimeout);
HttpConnectionParams.setSoTimeout(httpclient.getParams(), DataTimeout);
HttpPost post = new HttpPost(
String.format("http://" + ServerName + "/upload/%s/%s", user.getUsername(), file.getName()));
post.setEntity(new FileEntity(file, "application/octet-stream"));

SimpleDateFormat df = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT, Locale.US);
df.applyPattern("EEE, dd MMM yyyy HH:mm:ss z");
post.setHeader("Last-Modified", df.format(new Date(file.lastModified())));
HttpResponse httpResponse = executePost(httpclient, post);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
file.delete();
} else {
throw new HttpException("Failed to upload file " + file.getAbsolutePath(), statusCode);
}
} finally {
httpclient.close();
}
}

关于Android上传大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com