Пытаюсь выучить андроид, у меня сейчас все нормально, не отлично. Пытаюсь расширить свой набор навыков.
Итак, я пытаюсь получить видео для загрузки на сервер с модификацией. Моя модификация работает с загрузкой EditText и т. Д. Я использую здесь тот же IP-адрес, что и там.
В коде камера работает отлично, записывает видео и переименовывает видео, я думаю, что выбранное видео работает нормально (не совсем уверен в этом, но открывается галерея, я выбираю видео, и оно не падает так ..., и PHP позволяет мне опубликовать видео с помощью post man. Но когда я нажимаю кнопку загрузки, происходит сбой. Я не уверен, что проблема заключается в получении реального пути, в коде модификации или, возможно, мой выбор файла не работает? Мне нужен лучший кодер, чтобы помочь мне здесь. Я искал оверкада в течение нескольких дней. Перепробовал несколько примеров. Просто не заставил его работать.
Я не могу понять ошибку. Я попытался добавить несколько тостов, чтобы узнать, не получаю ли я ошибку, но я никогда не получаю тост. Просто сбой.
Вот мой код. Я хотя бы пытаюсь, брось мне кость.
Slim / PHP index
$app->post('/saveFile', function(Request $request, Response $response){
$response = array();
if (isset($_POST['desc']) && ($_POST['ID']) && strlen($_POST['desc']) > 0 &&
$_FILES['image']['error'] === UPLOAD_ERR_OK) {
$upload = new uploads();
$file = $_FILES['image']['tmp_name'];
$desc = $_POST['desc'];
$ID = $_POST['ID'];
if ($upload->saveFile($ID, $file,
getFileExtension($_FILES['image']['name']), $desc)) {
$response['error'] = false;
$response['message'] = 'File Uploaded Successfullly';
}
else {
$response['error'] = true;
$response['message'] = 'Required parameters are not available';
}
echo json_encode($response);
}
});
function getFileExtension($file)
{
$path_parts = pathinfo($file);
return $path_parts['extension'];
}
uploads.php
class uploads
{
private $con;
public function __construct()
{
require_once dirname(__FILE__) . '/DbConnect.php';
$db = new DbConnect();
$this->con = $db->connect();
}
public function saveFile($ID, $file, $extension, $desc)
{
$name = round(microtime(true) * 1000) . '.' . $extension;
$filedest = dirname(__FILE__) . UPLOAD_PATH . $name;
move_uploaded_file($file, $filedest);
$url = $server_ip = gethostbyname(gethostname());
$stmt = $this->con->prepare("INSERT INTO images (ID, description, url)
VALUES (?, ?, ?)");
$stmt->bind_param("sss", $ID, $desc, $name);
if ($stmt->execute())
return true;
else
return false;
}
}
API интерфейс
@Multipart
@POST("saveFile")
Call<MyResponse> uploadImage(@Part MultipartBody.Part file, @Part("desc")
RequestBody desc, @Field("ID") String ID);
мой класс занятий
public class vidcam extends Activity implements View.OnClickListener {
String ID, prepend;
private final int VIDEO_REQUEST_CODE = 100;
private final int REQUEST_TAKE_GALLERY_VIDEO =22;
File video_file;
Button RecordButton, tobaitana, viduploadbutton, uploadvideo;
Uri selectedVideo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vidcam);
RecordButton = (Button) findViewById(R.id.RecordButton);
RecordButton.setOnClickListener(this);
tobaitana = (Button) findViewById(R.id.tobaitana);
tobaitana.setOnClickListener(this);
viduploadbutton = (Button) findViewById(R.id.viduploadbutton);
viduploadbutton.setOnClickListener(this);
uploadvideo = (Button) findViewById(R.id.uploadvideo);
uploadvideo.setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (requestCode == VIDEO_REQUEST_CODE){
Toast.makeText(getApplicationContext(), "Video Saved",
Toast.LENGTH_LONG).show();
}
if (resultCode == RESULT_OK) {
if(requestCode == REQUEST_TAKE_GALLERY_VIDEO){
selectedVideo = data.getData();
}}}
public File getfilepath () throws IOException {
File videofolder = new File("sdcard/video_app");
if (!videofolder.exists())
{
videofolder.mkdir();
}
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
prepend = "MOBILITY_" + timestamp + "_";
video_file = File.createTempFile(prepend, ".mp4", videofolder);
return video_file;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.RecordButton:
Intent video_intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
File videolocation = null;
try {
videolocation = getfilepath();
} catch (IOException e) {
e.printStackTrace();
}
Uri video_uri = Uri.fromFile(videolocation);
video_intent.putExtra(MediaStore.EXTRA_OUTPUT, video_uri);
video_intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(video_intent, VIDEO_REQUEST_CODE);
break;
case R.id.tobaitana:
Intent toanbait = new Intent(this, Abait.class);
startActivity(toanbait);
break;
case R.id.viduploadbutton:
Intent selectfile = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(selectfile, REQUEST_TAKE_GALLERY_VIDEO);
break;
case R.id.uploadvideo:
uploadFile(selectedVideo);
break;
}
}
public void useID() {
SharedPreferences shareID = getSharedPreferences("shareID", Context.MODE_PRIVATE);
ID = shareID.getString("ID", "");
}
private String getRealPathFromURI(Uri contentUri) {
String filePath;
Cursor cursor = getContentResolver().query(contentUri, null, null, null, null);
if(cursor == null)
{
filePath = contentUri.getPath();
}else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Video.VideoColumns.DATA);
filePath = cursor.getString(idx);
cursor.close();
Toast.makeText(getApplicationContext(), "realpath toast" + filePath, Toast.LENGTH_LONG).show();
}
return filePath;
}
private void uploadFile(Uri selectedVideo) {
useID();
File vidfile = new File(getRealPathFromURI(selectedVideo));
if (vidfile.exists()) {
RequestBody requestBody = RequestBody.create(MediaType.parse(getContentResolver().getType(selectedVideo)), vidfile);
MultipartBody.Part file = MultipartBody.Part.createFormData("filename", vidfile.getName(), requestBody);
RequestBody desc = RequestBody.create(MediaType.parse("text/plain"), vidfile.getName());
Call<MyResponse> call = RetrofitClient.getInstance().getAPIService().uploadImage(file, desc, ID);
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (!response.body().error) {
Toast.makeText(getApplicationContext(), "File Uploaded Successfully...", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Some error occurred...", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});
} else {Toast.makeText(getApplicationContext(), "no file exists...", Toast.LENGTH_LONG).show();
}
}
}