Android图片上传到PHP服务器,实现简单快捷的上传方法 (android 上传图片到php服务器)
随着移动互联网的不断发展,越来越多的APP需要实现图片上传功能,而将图片上传到服务器又是必须的。本篇文章将介绍如何使用Android实现图片上传到PHP服务器,实现简单快捷的上传方法。
一、前置条件
在实现图片上传之前,需要确保已经具备以下条件:
1.服务器已经搭建好,且具备PHP环境。
2.在服务器上创建文件上传目录,并确保具备写权限。
二、代码实现
1.添加网络权限
需要在AndroidManifest.xml文件中添加网络权限:
“`
“`
2.创建上传文件的Java文件
接下来,需要创建上传文件的Java文件,命名为UploadFileUtils.java,代码如下:
“`
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class UploadFileUtils {
private static final int TIMEOUT = 10 * 1000; // 超时时间
private static final String CHARSET = “utf-8”; // 设置编码
public static String uploadFile(File file, String requestUrl) {
String result = null;
try {
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(TIMEOUT);
conn.setConnectTimeout(TIMEOUT);
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”, “multipart/form-data;boundary=” + “*****”); // 请求头的Content-Type
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
StringBuffer = new StringBuffer();
.append(“–“);
.append(“*****”);
.append(“\r\n”);
.append(“Content-Disposition: form-data; name=\”file\”; filename=\”” + file.getName() + “\”” + “\r\n”);
.append(“Content-Type: ” + “image/jpeg” + “\r\n\r\n”);
dos.write(.toString().getBytes());
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
dos.write(buffer, 0, len);
}
fis.close();
dos.write(“\r\n”.getBytes());
byte[] end_data = (“–” + “*****” + “–” + “\r\n”).getBytes(); // 结尾标识
dos.write(end_data);
dos.flush();
int res = conn.getResponseCode();
if (res == 200) {
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
result = line;
}
reader.close();
}
dos.close();
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
“`
3.在需要上传图片的Activity中调用上述Java文件
在需要上传图片的Activity中,调用之前创建好的Java文件,实现图片的上传。示例代码如下:
“`
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
public class MnActivity extends Activity {
private static final int PICK_PICTURE_REQUEST_CODE = 1; // 选择图片的请求码
private ImageView mImageView;
private Button mUploadButton;
private String mImagePath; // 图片的本地路径
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mn);
mImageView = (ImageView) findViewById(R.id.image_view);
mUploadButton = (Button) findViewById(R.id.upload_button);
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(“image/*”);
startActivityForResult(intent, PICK_PICTURE_REQUEST_CODE);
}
});
mUploadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mImagePath == null) {
Toast.makeText(MnActivity.this, “请先选择图片”, Toast.LENGTH_SHORT).show();
return;
}
final File file = new File(mImagePath);
if (!file.exists()) {
Toast.makeText(MnActivity.this, “图片不存在”, Toast.LENGTH_SHORT).show();
return;
}
new Thread(new Runnable() {
@Override
public void run() {
String result = UploadFileUtils.uploadFile(file, “http://.com/upload.php”); // 服务器的文件上传接口
if (result != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MnActivity.this, “上传成功”, Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_PICTURE_REQUEST_CODE && resultCode == RESULT_OK) {
Uri uri = data.getData();
mImagePath = ImageUtils.getImageAbsolutePath(MnActivity.this, uri);
mImageView.setImageURI(uri);
}
}
}
“`
通过上述代码,用户可以实现图片的选择和上传操作,实现了。
三、
通过本篇文章的介绍,用户可以实现Android图片上传到PHP服务器的功能,以实现更多功能需求及应用场景的满足。在实际应用中,用户还需要注意网络环境、上传文件大小、上传文件格式等问题,以避免一些潜在安全风险,确保应用运行的安全性和稳定性。