gpt4 book ai didi

java - 如何使用 Android 上传服务上传从相机获取的图像

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

我已经能够让用户将从其图库中拍摄的照片上传到服务器,但是当用户使用相机实时捕捉并上传时,我收到此错误不支持的方案:文件:://​​/storage/...

我正在使用android上传服务库

implementation "net.gotev:uploadservice:3.5.2"

我搜索发现file://方案不允许与Intent附加。

<强>1。单击按钮时从相机中选择图像

capture_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
FileProvider.getUriForFile(UploadActivity2.this, BuildConfig.APPLICATION_ID + ".provider",
createImageFile()));
startActivityForResult(intent, 0);
} catch (IOException ex) {
ex.printStackTrace();
}

}
});

<强>2。获取图像捕获

if (resultCode == Activity.RESULT_OK)
switch (requestCode){
case 0:
try {
Uri cameraPath = FileProvider.getUriForFile(UploadActivity2.this,
BuildConfig.APPLICATION_ID + ".provider", createImageFile());
String stringUri = cameraPath.toString();
selectedImages.add(stringUri);

}catch (IOException ex) {
ex.printStackTrace();
Glide.with(this)
.load(cameraFilePath)
.into(display_image);
break;
}
}

如您所见,我使用文件提供程序来获取 uri 并将 uri 存储在名为 selectedimages 的变量中,以便我可以通过 Intent 将其传递到发生上传的另一个 Activity

createImageFile方法

  private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.UK).format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
//This is the directory in which the file will be created. This is the default location of Camera photos
File storageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM), "Camera");
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for using again
cameraFilePath = "file://" + image.getAbsolutePath();
return image;
}

<强>3。将intent PATH传递给uploadActivity

next_upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(UploadActivity2.this, UploadActivity3.class);
intent.putStringArrayListExtra("PATH", selectedImages);
startActivity(intent);
}
});

<强>5。上传发生的UploadAcvity

public void upload() {
ArrayList<String> selectedImages = getIntent().getStringArrayListExtra("PATH");
try {
String uploadId = UUID.randomUUID().toString();

//Creating a multi part request
new MultipartUploadRequest(this, uploadId, EndPoints.UPLOAD_URL)
.addFileToUpload(selectedImages.get(0), "image") //Adding file
.addParameter("caption", captionx) //Adding text parameter to the request
.setNotificationConfig(new UploadNotificationConfig())
.setMaxRetries(0)
.startUpload(); //Starting the upload

} catch (Exception exc) {
Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
}
}

使用这个。

a.使用 Glide.with(this) 在第 2 点中未显示图像 .load(相机文件路径) .into(display_image);

b.图片已上传,但它是一个 0 字节的空文件。

但是当我将点 2selectedImages 的变量值从 selectedImages.add(stringUri); 更改为 selectedImages.add(cameraFilePath);

b.点击上传后,出现错误不支持的方案:文件:://​​/storage/

最佳答案

找到了答案。

1.createImageFile方法中。我必须使用 -

从捕获的文件中获取 content://url
File newFile = new File(storageDir, image.getName());
contentUrl = FileProvider.getUriForFile(UploadActivity2.this,
BuildConfig.APPLICATION_ID + ".provider", newFile);
stringContentUrl = contentUrl.toString();

2. 然后,我在捕获图像时将 stringContentUrl 传递到选定的图像字符串中。

selectedImages.add(stringContentUrl);

3. 通过 Intent Extra 传递它并在 uploadActivity 中调用它,如问题中的点 34 所示。

关于java - 如何使用 Android 上传服务上传从相机获取的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59637970/

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