gpt4 book ai didi

java - 在 Android 应用程序中如何从 google appengine 下载 blob

转载 作者:行者123 更新时间:2023-12-01 04:12:48 25 4
gpt4 key购买 nike

我有一个 appengine 应用程序,提供来自 blob 存储区的 zip 文件。当我使用这个 URL+查询时:

http://spiceappcloud.appspot.com/bundle-service?spice_category=Education&spice_sub_category0=Topography&spice_sub_category1=Outdoor%20Skills&spice_name=Topo.zip

从 Chrome 或 Firefox 下载文件!如何在 Android 应用程序的服务中下载相同的文件?

我希望有代码。

最佳答案

好的,我通过使用 HttpClient 和 HttpGet 通过反复试验得到了它。

private boolean downloadFile(String query) 
{
Log.d(TAG, "trying to download file");

boolean downloadSuccessful = false;

if(!fileName.endsWith(".zip"))
{
fileName += ".zip";
Log.d(TAG, "added zip to file name");
}

is = null;
bis = null;
fos = null;
bos = null;
outFile = null;

int counter = 0;

while(!downloadSuccessful && counter < 5)
{
Log.d(TAG + ".downloadFile()", "attempt number: " + counter);

try
{
//connect(query);
HttpClient client = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(query);
HttpResponse response = null;

try
{
response = client.execute(httpGet);

StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();

Log.d(TAG, "statusCode: " + statusCode);

if (statusCode == 200)
{
HttpEntity entity = response.getEntity();

is = entity.getContent();
bis = new BufferedInputStream(is);
}
else
{
Log.e(TAG, "Failed to download file");
}
}
catch (ClientProtocolException e)
{
Log.e(TAG, e.getMessage());
}
catch (IOException e)
{
Log.e(TAG, e.getMessage());
}


Header[] hs = response.getAllHeaders();

if(hs == null)
{
Log.e(TAG, "Headers are null ");
return false;
}

for(Header h: hs)
{
Log.d(TAG, "Header values: " + h.getValue());
}



fileSize = 200000;

if(counter == 0)
{
Log.e(TAG, "File size is: " + fileSize);
}
else
{
Log.e(TAG, "This is what's left to download: " + fileSize);
}

sendNotifiction("Connecting", "Connecting...", "Spice bundle: " + fileName);
updateUser(MESSAGE_CONNECTING_STARTED, fileSize / 1024);

outFile = new File(ZIP_LOCATION + "/" + fileName);
fos = new FileOutputStream(outFile);
bos = new BufferedOutputStream(fos, DOWNLOAD_BUFFER_SIZE);
data = new byte[DOWNLOAD_BUFFER_SIZE];
bytesRead = 0;
totalRead = 0;

downloadSuccessful = download();


Log.d(TAG, "Total bytes Read: " + totalRead + " of: " + fileSize);

if(totalRead == fileSize)
{
downloadSuccessful = true;

Log.e(TAG, "Download successful use this message wairily");
}
else
{
Log.e(TAG, "Download fubar");
}
}
catch(FileNotFoundException e)
{
Log.e(TAG, "FileNotFoundException: " + e.getMessage());
notificationFlash = "Error downloading";
notificationTitle = "Error";
notificationText = "Spice bundle: " + fileName;

sendNotifiction(notificationFlash, notificationTitle, notificationText);
updateUser(MESSAGE_DOWNLOAD_ERROR, 0);
}
catch(NullPointerException e)
{
Log.e(TAG, "NullPointerException");
}
catch(IllegalStateException e)
{
Log.e(TAG, e.getMessage());
}
catch(Exception e)
{
Log.e(TAG, "Exception: " + e.getMessage());

notificationFlash = "Error downloading";
notificationTitle = "Error";
notificationText = "Spice bundle: " + fileName;

sendNotifiction(notificationFlash, notificationTitle, notificationText);
updateUser(MESSAGE_DOWNLOAD_ERROR, 0);
}

counter++;
}

try
{
if(bos != null)
{
bos.close();
}

if(fos != null)
{
fos.close();
}

if(bis != null)
{
bis.close();
}

if(is != null)
{
is.close();
}
}
catch (IOException e)
{
Log.e(TAG + " given up downloading", "IOException thrown");

notificationFlash = "Error downloading";
notificationTitle = "Error";
notificationText = "Spice bundle: " + fileName;

sendNotifiction(notificationFlash, notificationTitle, notificationText);
updateUser(MESSAGE_DOWNLOAD_ERROR, 0);
}

return downloadSuccessful;
}

private boolean download()
{
boolean downloadComplete = false;

try
{
while(!this.isCancelled())
{
bytesRead = bis.read(data, 0, data.length);

if( bytesRead < 0)
{
downloadComplete = true;
break;
}

bos.write(data, 0, bytesRead);

totalRead += bytesRead;
int totalReadInKB = totalRead / 1024;

if(totalReadInKB % 100 == 0)
{
Log.d(TAG, "Total Read In KB: " + totalReadInKB + " of: " + fileSize/1024);
updateUser(MESSAGE_UPDATE_PROGRESS_BAR, totalReadInKB);
}
}
}
catch(IOException e)
{
Log.e(TAG + ".download()", e.getMessage());
Log.e(TAG + ".download()", "IOException thrown download incomplete");
}
finally
{
try
{
bos.flush();
}
catch (IOException e)
{
Log.e(TAG + ".download()", e.getMessage());
Log.e(TAG + ".download()", "IOException thrown couldn't flush");
}
}

return downloadComplete;
}

关于java - 在 Android 应用程序中如何从 google appengine 下载 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752076/

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