uri.getPath() 获取地址 上传提示 No such file or directory

完备世界 2017-09-23 03:37:58


FileInputStream 运行 是提示 No such file or directory ,这个怎么解决。


uri.getPath() 不是获取的文件的地址吗?为什么上传还会报错呢?



下面是源代码

package com.example.dataup;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.File;

public class MainActivity extends Activity {

private Button btn1;
private Button btn2;

private String uploadUrl = "http://www.maizitime.com:8081/upload_test";
private String filePath;
private String filePath1;
private String filePath2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("test", "程序启动");
Log.e("test", "程序启动");
Log.d("test", "程序启动");
Log.v("test", "程序启动");
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);

btn1.setOnClickListener(new ButtonClickListener());
btn2.setOnClickListener(new ButtonClickListener());
}

class ButtonClickListener implements View.OnClickListener {

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:

chooseFile();

break;

case R.id.btn2:

new Thread(new Runnable() {
@Override
public void run() {
UploadUtil.uploadFile(new File(filePath), uploadUrl);
}
}).start();

break;

default:
break;
}
}
}

private void chooseFile() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
filePath = uri.getPath();
Log.i("test", "filePath1:" + filePath);
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}




package com.example.dataup;

import android.util.Log;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;

/**
* Created by blue on 2016/3/26.
*/
public class UploadUtil {

private static final int TIME_OUT = 10 * 1000;
private static final String CHARSET = "UTF-8";

public static int uploadFile(File file, String requestURL) {
int res = 0;

String BOUNDARY = UUID.randomUUID().toString();// boundary
String PREFIX = "--";
String LINE_END = "\r\n";
String CONTENT_TYPE = "multipart/form-data";

try {
URL url = new URL(requestURL);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setReadTimeout(TIME_OUT);
httpURLConnection.setConnectTimeout(TIME_OUT);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Charset", CHARSET);
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpURLConnection.setRequestProperty("Content-type", CONTENT_TYPE + ";boundary=" + BOUNDARY);

if (file != null) {
Log.i("test", "upload start1");
DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream());
StringBuffer sb = new StringBuffer();
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINE_END);
sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"" + LINE_END);
sb.append("Content-Type: application/octet-stream; Charset=" + CHARSET + LINE_END);
sb.append(LINE_END);

Log.i("test", "upload start2");
Log.i("test", "upload start3");
dataOutputStream.write(sb.toString().getBytes());
Log.i("test", "upload start4"+file);
InputStream inputStream = new FileInputStream(file);
Log.i("test", "upload start5"+inputStream);
byte[] bytes = new byte[1024];
int len = 0;
Log.i("test", "upload start5");
while ((len = inputStream.read(bytes)) != -1) {
dataOutputStream.write(bytes, 0, len);
Log.i("test", "upload bytes:" + len);
}
Log.i("test", "upload start6");
inputStream.close();
dataOutputStream.write(LINE_END.getBytes());

String end = PREFIX + BOUNDARY + PREFIX + LINE_END;
dataOutputStream.write(end.getBytes());
dataOutputStream.flush();
Log.i("test", "upload end");

res = httpURLConnection.getResponseCode();
if (res == 200) {
Log.i("test", "upload success");
InputStream inputStream1 = httpURLConnection.getInputStream();
StringBuffer stringBuffer = new StringBuffer();
while ((len = inputStream1.read(bytes)) != -1) {
stringBuffer.append(new String(bytes, 0, len, "UTF-8"));
}
Log.i("test", "result:" + stringBuffer.toString());
} else {
Log.i("test", "upload fail");
}
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return res;
}
}

...全文
655 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
完备世界 2017-09-24
  • 打赏
  • 举报
回复
这个是真机测试,模拟器上可以运行,模拟器上是获取的 文件地址,不是 数字
淡定的人O 2017-09-24
  • 打赏
  • 举报
回复
视频路径有错吧,获取真实路径,camera的视频应该是这样的/storage/emulated/0/DCIM/Camera/,其他视频应该也是放在/storage/emulated/0下

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧