gpt4 book ai didi

java - 为 async-http 文件上传选择文件(uri 到文件路径)

转载 作者:搜寻专家 更新时间:2023-11-01 07:47:04 24 4
gpt4 key购买 nike

我知道我的问题已经解决了多次,但我找不到任何可以帮助我解决特定问题的东西。

我打算从系统中的任何地方选择一个文件:

private void showFileChooser() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);

try {
startActivityForResult(
Intent.createChooser(intent, "Select a File to Upload"),
FILE_SELECT_CODE);
} catch (android.content.ActivityNotFoundException ex) {
// Potentially direct the user to the Market with a Dialog
Toast.makeText(this, "Please install a File Manager.",
Toast.LENGTH_SHORT).show();
}


}

我在这里接受这个 Intent :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode) {
case FILE_SELECT_CODE:

if (resultCode == RESULT_OK) {
// Get the Uri of the selected file
Uri uri = data.getData();

我有一个像这样的上传方法:

private void upload(File file){
RequestParams params = new RequestParams();
try {
params.put("fileToUpload", file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
AsyncHttpClient client = new AsyncHttpClient();
client.post("http://...", params, new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
System.out.println("statusCode "+statusCode);//statusCode 200
}

@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

}
});
}

问题是我不知道如何“结合”onActivity 和 upload 这两个方法,因为我不知道如何处理从 Intent 中获得的信息,以便 AsyncHttpClient 可以使用它。

我尝试将 Uri 转换为绝对路径,但无法管理(在线解决方案似乎专门针对图像工作)。我也无法将 uri“转换”为文件。

我有什么办法可以做到这一点?我错过了什么吗?

最佳答案

理想的解决方案是使用 ContentResolveropenInputStream()得到一个InputStream关于 Uri 标识的内容,然后传递 InputStream到您的 HTTP 客户端 API 以用于上传。

如果您的 HTTP 客户端 API 不支持使用 InputStream或可以从其中派生的东西(例如 Reader ),因此您需要一个 File , 使用 InputStream和一个 FileOutputStream在您控制的某些文件上制作内容的本地副本(例如,在 getCacheDir() 中)。然后,使用您的本地副本进行文件上传操作,完成后删除本地副本。

关于java - 为 async-http 文件上传选择文件(uri 到文件路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41838943/

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