先将jar包复制到android libs目录下
复制以下实现代码
以下为实现代码:
/**
* 通过ftp上传文件
* @param url ftp服务器地址 如:
* @param port 端口如 :
* @param username 登录名
* @param password 密码
* @param remotePath 上到ftp服务器的磁盘路径
* @param fileNamePath 要上传的文件路径
* @param fileName 要上传的文件名
* @return
*/
public String ftpUpload(String url, String port, String username,String password, String remotePath, String fileNamePath,String fileName) {
FTPClient ftpClient = new FTPClient()
FileInputStream fis = null
String returnMessage = "0"
try {
ftpClient.connect(url, Integer.parseInt(port))
boolean loginResult = ftpClient.login(username, password)
int returnCode = ftpClient.getReplyCode()
if (loginResult &&FTPReply.isPositiveCompletion(returnCode)) {// 如果登录成功
ftpClient.makeDirectory(remotePath)
// 设置上传目录
ftpClient.changeWorkingDirectory(remotePath)
ftpClient.setBufferSize(1024)
ftpClient.setControlEncoding("UTF-8")
ftpClient.enterLocalPassiveMode()
fis = new FileInputStream(fileNamePath + fileName)
ftpClient.storeFile(fileName, fis)
returnMessage = "1" //上传成功
} else {// 如果登录失败
returnMessage = "0"
}
} catch (IOException e) {
e.printStackTrace()
throw new RuntimeException("FTP客户端出错!", e)
} finally {
//IOUtils.closeQuietly(fis)
try {
ftpClient.disconnect()
} catch (IOException e) {
e.printStackTrace()
throw new RuntimeException("关闭FTP连接发生异常!", e)
}
}
return returnMessage
}
界面很简单,点击 【选择图片】,从图库里选择图片,显示到下面的imageview里,点击上传,就会上传到指定的服务器布局文件:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="选择图片"
android:id="@+id/selectImage"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="上传图片"
android:id="@+id/uploadImage"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
/>
</LinearLayout>
Upload Activity:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
public class Upload extends Activity implements OnClickListener {
private static String requestURL = "http://192.168.1.212:8011/pd/upload/fileUpload.do"
private Button selectImage, uploadImage
private ImageView imageView
private String picPath = null
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.upload)
selectImage = (Button) this.findViewById(R.id.selectImage)
uploadImage = (Button) this.findViewById(R.id.uploadImage)
selectImage.setOnClickListener(this)
uploadImage.setOnClickListener(this)
imageView = (ImageView) this.findViewById(R.id.imageView)
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.selectImage:
/***
* 这个是调用android内置的intent,来过滤图片文件 ,同时也可以过滤其他的
*/
Intent intent = new Intent()
intent.setType("image/*")
intent.setAction(Intent.ACTION_GET_CONTENT)
startActivityForResult(intent, 1)
break
case R.id.uploadImage:
if (picPath == null) {
Toast.makeText(Upload.this, "请选择图片!", 1000).show()
} else {
final File file = new File(picPath)
if (file != null) {
String request = UploadUtil.uploadFile(file, requestURL)
uploadImage.setText(request)
}
}
break
default:
break
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
/**
* 当选择的图片不为空的话,在获取到图片的途径
*/
Uri uri = data.getData()
Log.e(TAG, "uri = " + uri)
try {
String[] pojo = { MediaStore.Images.Media.DATA }
Cursor cursor = managedQuery(uri, pojo, null, null, null)
if (cursor != null) {
ContentResolver cr = this.getContentResolver()
int colunm_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
cursor.moveToFirst()
String path = cursor.getString(colunm_index)
/***
* 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,
* 这样的话,我们判断文件的后缀名 如果是图片格式的话,那么才可以
*/
if (path.endsWith("jpg") || path.endsWith("png")) {
picPath = path
Bitmap bitmap = BitmapFactory.decodeStream(cr
.openInputStream(uri))
imageView.setImageBitmap(bitmap)
} else {
alert()
}
} else {
alert()
}
} catch (Exception e) {
}
}
super.onActivityResult(requestCode, resultCode, data)
}
private void alert() {
Dialog dialog = new AlertDialog.Builder(this).setTitle("提示")
.setMessage("您选择的不是有效的图片")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
picPath = null
}
}).create()
dialog.show()
}
}
这个才是重点 UploadUtil:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class UploadUtil {
private static final String TAG = "uploadFile"
private static final int TIME_OUT = 10 * 1000// 超时时间
private static final String CHARSET = "utf-8"// 设置编码
/**
* 上传文件到服务器
* @param file 需要上传的文件
* @param RequestURL 请求的rul
* @return 返回响应的内容
*/
public static int uploadFile(File file, String RequestURL) {
int res=0
String result = null
String BOUNDARY = UUID.randomUUID().toString()// 边界标识 随机生成
String PREFIX = "--", LINE_END = "\r\n"
String CONTENT_TYPE = "multipart/form-data"// 内容类型
try {
URL url = new URL(RequestURL)
HttpURLConnection conn = (HttpURLConnection) url.openConnection()
conn.setReadTimeout(TIME_OUT)
conn.setConnectTimeout(TIME_OUT)
conn.setDoInput(true)// 允许输入流
conn.setDoOutput(true)// 允许输出流
conn.setUseCaches(false)// 不允许使用缓存
conn.setRequestMethod("POST")// 请求方式
conn.setRequestProperty("Charset", CHARSET)// 设置编码
conn.setRequestProperty("connection", "keep-alive")
conn.setRequestProperty("Content-Type", CONTENT_TYPE + "boundary="+ BOUNDARY)
if (file != null) {
/**
* 当文件不为空时执行上传
*/
DataOutputStream dos = new DataOutputStream(conn.getOutputStream())
StringBuffer sb = new StringBuffer()
sb.append(PREFIX)
sb.append(BOUNDARY)
sb.append(LINE_END)
/**
* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
* filename是文件的名字,包含后缀名
*/
sb.append("Content-Disposition: form-dataname=\"file\"filename=\""
+ file.getName() + "\"" + LINE_END)
sb.append("Content-Type: application/octet-streamcharset="
+ CHARSET + LINE_END)
sb.append(LINE_END)
dos.write(sb.toString().getBytes())
InputStream is = new FileInputStream(file)
byte[] bytes = new byte[1024]
int len = 0
while ((len = is.read(bytes)) != -1) {
dos.write(bytes, 0, len)
}
is.close()
dos.write(LINE_END.getBytes())
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END)
.getBytes()
dos.write(end_data)
dos.flush()
/**
* 获取响应码 200=成功 当响应成功,获取响应的流
*/
res = conn.getResponseCode()
Log.e(TAG, "response code:" + res)
if (res == 200) {
Log.e(TAG, "request success")
InputStream input = conn.getInputStream()
StringBuffer sb1 = new StringBuffer()
int ss
while ((ss = input.read()) != -1) {
sb1.append((char) ss)
}
result = sb1.toString()
Log.e(TAG, "result : " + result)
} else {
Log.e(TAG, "request error")
}
}
} catch (MalformedURLException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
return res
}
}
有两种方法,第一,把你的图片转成字节流,然后用post方法把字节流传到服务端,然后服务端接收到字节流之后,开启一个线程把它重新压缩成图片,保存在某个文件夹下面。第二,开启一个线程,用socket直接把图片放到stream中传到服务端,服务端接收后保存到文件夹下。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)