Я новичок, когда дело доходит до любой формы http и volley соединений с android, а также с загрузкой файлов и в настоящее время работаю над проектом, который требует как для android.У меня есть файлы, сохраненные в месте, к которому я не могу получить прямой доступ через https для загрузки с использованием залпа.Мне нужно использовать вызов POST для php, чтобы вызвать загрузку через залп для моего приложения.Я видел руководства по принудительной загрузке с использованием информации HTTPCilent, однако мое приложение не поддерживает использование прямых вызовов HTTPClient.Мы обрабатываем файлы большего размера.В частности, мое приложение загружает файл sfb, созданный для сцены Android.
Я пытался получить его там, где volley отправляет на мою страницу php строковый запрос POST, который выводит содержимое файла.Однако, когда я пытаюсь затем отобразить sfb, я получаю ошибку индексации из сцены, когда пытаюсь поместить мою модель на экран.Уже было проверено, что оригинальный файл при сохранении непосредственно в моем приложении отображается правильно.
Кто-нибудь знает, как сделать этот тип загрузки с залпом?И если это невозможно, есть ли другой способ без использования библиотеки HTTPClient для этого?
Ниже приведены разделы моего кода, которые в настоящее время обрабатывают связь между моим php и приложением:
PHP:
<?php
ini_set('display_errors',1);
$fileID = $_POST["model_id"];
$filePath = $_POST["model_path"];
$downloadPath = "<dir only this page can get to> /$fileID/$filePath";
readfile($downloadPath);
//$fileStr = file_get_contents ($downloadPath);
// echo $fileStr;
?>
Android:
private StringRequest generatePhpDownloadRequest(String FileName, String FileID)
{
StringRequest request = new StringRequest(Request.Method.POST, WebsiteInterface.DOWNLOAD_URL_STRING,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// response
Log.d("Response", response);
//@todo save the return information
/*if(response.length() > 60) {
createAlertDialog("LNG:" + response.substring(0, 56));
}else {
createAlertDialog(response);
}*/
if(response.length() > 10)
{
try {
if (response!=null) {
FileOutputStream outputStream;
String name=ModelInformation[0];
outputStream = openFileOutput(name, Context.MODE_PRIVATE);
outputStream.write(response.getBytes(Charset.forName("UTF-8")));
outputStream.close();
ReturnWithResult(RESULT_OK, getFilesDir().getAbsolutePath());
//Toast.makeText(this, "Download complete.", Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE");
e.printStackTrace();
ReturnWithResult(RESULT_CANCELED, "KEY_ERROR: UNABLE TO DOWNLOAD FILE");
}
ReturnWithResult(RESULT_OK, getFilesDir().getAbsolutePath());
}
else
{
ReturnWithResult(RESULT_CANCELED, "invalid file");
}
//ReturnWithResult(RESULT_CANCELED, "Sucess but no file save");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
String msg = "unknown error";
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
//This indicates that the reuest has either time out or there is no connection
//Log.d(TAG, "Connection Error!");
msg = "Connection Error!";
} else if (error instanceof AuthFailureError) {
//Error indicating that there was an Authentication Failure while performing the request
//Log.d(TAG, "Authentication Error!");
msg = "Authentication Error!";
} else if (error instanceof ServerError) {
//Indicates that the server responded with a error response
//Log.d(TAG, "Server Error!");
msg = "Server Error!";
} else if (error instanceof NetworkError) {
//Indicates that there was network error while performing the request
//Log.d(TAG, "Network Error!");
msg = "Network Error!";
} else if (error instanceof ParseError) {
// Indicates that the server response could not be parsed
//Log.d(TAG, "Parsing Error!");
msg = "Parsing Error!";
}
VolleyLog.d(TAG, "Error: " + error.getMessage());
ReturnWithResult(Activity.RESULT_CANCELED, "VOLLEY: " + msg);
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("model_id", FileID);
params.put("model_path", FileName);
return params;
}
};
return request;
}