2014-09-04 29 views
2

我的Android应用程序可以上传照片到摄像机直接拍摄的S3 AWS或从图像中选择。现在我想让应用上传视频库中的视频。但上传的文件大小始终为0Kb。将视频上传到S3 AWS从Android应用程序导致一个0Kb文件

这是视频采摘过程中的代码:

Intent videoPickerIntent = new Intent(Intent.ACTION_PICK); 
videoPickerIntent.setType("video/*"); 
getActivity().startActivityForResult(videoPickerIntent, SELECT_VIDEO); 

然后,我得到的视频路径(我测试过我得到出场一个VideoView内的视频在同一应用程序的路径)。 (例如:“/storage/emulated/0/DCIM/Camera/VID_20140903_163147.mp4”)

最后,我用一个PutObjectRequest在的AsyncTask,我上传照片的方式类似。

PutObjectRequest por = new PutObjectRequest(bucket, nameInAwsWithPath, videoPath); 
por.setCannedAcl(CannedAccessControlList.PublicRead); 
s3Client.putObject(por); 

然后,在S3中,我可以看到一个文件,按预期命名,但是为空。 0 Kb大小。

怎么回事?

+0

如果你有当您运行此代码,是否有任何异常或错误消息logcat的开?有可能是在单独的线程上抛出异常,使其不太明显。 – 2014-09-04 20:23:10

+0

logcat中完全没有错误或警告。 putobject在try/catch里面,一切看起来都很顺利......但是我得到了AWS上的空文件。 – raul 2014-09-05 07:53:35

+0

现在我宣布: PutObjectRequest por; 在doInBackground方法的开始,并在最后实例化它: por = new PutObjectRequest(bucket,nameInAwsWithPath,videoPath); 012.CalnedAcl(CannedAccessControlList.PublicRead); por.setCannedAcl(CannedAccessControlList.PublicRead); s3Client.putObject(por); 它工作 – raul 2014-09-05 10:36:28

回答

1

这是代码:

private class S3PutVideoTask extends AsyncTask<String, Integer, Boolean> { 

     ProgressDialog dialog; 

     protected void onPreExecute() { 
      dialog = new ProgressDialog(getActivity()); 
      dialog.setMessage(getString(R.string.uploadingvideo)); 
      dialog.setCancelable(false); 
      dialog.show(); 
     } 

     protected Boolean doInBackground(String... params) { 

      boolean result = true; 
      // Put the video data into S3. 
      try { 

       PutObjectRequest por; 

       String filename = "img_" + xxxxx[pos].id + "_" 
         + System.currentTimeMillis() + ".avi"; 

       File fileToUpload = new File(mCurrentAbsoluteVideoPath); 

       SharedPreferences prefs = getActivity().getSharedPreferences("GlobalPrefs", Context.MODE_PRIVATE); 
       String bucket = prefs.getString("bucket", PICTURE_BUCKET); 

       por = new PutObjectRequest(bucket, filename, fileToUpload); 

       por.setCannedAcl(CannedAccessControlList.PublicRead); 
       s3Client.putObject(por); 

      } catch (Exception exception) { 

       result = false; 
      } 

      return result; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 

      dialog.dismiss(); 

      if (!result) { 
       //show error 
      } else { 
       fileUploaded = true; 
       dismissUpload(); 
      } 
     } 
    } 
+0

这是一个答案或问题的更新? – 2016-03-30 13:18:08

+0

是@ user6042879请求的代码(一个答案,显示我如何当时纠正了这个问题) – raul 2016-03-30 13:19:09

+0

所以你可能应该接受它来清楚说明问题已经解决了 – 2016-03-30 13:33:34

相关问题