在Android应用中,可以用以下代码将文件上传到服务器。
首先在Android前端编写一个文件上传页面,其中包含一个文件选择框和一个上传按钮。
代码如下:
<!-- 文件选择框 -->
<input type="file" id="file" name="file" />
<!-- 上传按钮 -->
<button type="button" onclick="uploadFile()">上传文件</button>
然后,编写一个上传函数 uploadFile()
,使用 HttpUrlConnection 发送 POST 请求将所选的文件上传到服务器。
代码如下:
private void uploadFile() {
try {
// 获取所选的文件
String filePath = getRealPathFromURI(getApplicationContext(), fileUri);
File file = new File(filePath);
// 设置上传地址
String uploadUrl = "http://your-server.com/upload.php";
// 创建请求
URL url = new URL(uploadUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
// 设置请求头
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
// 创建输出流
DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
dos.writeBytes(twoHyphens + boundary + end);
dos.writeBytes("Content-Disposition: form-data; name="file";filename="" + file.getName() + """ + end);
dos.writeBytes(end);
// 创建输入流
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
dos.write(buffer, 0, count);
}
fis.close();
// 添加结尾
dos.writeBytes(end);
dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
// 发送请求并获取响应
dos.flush();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
String result = br.readLine();
dos.close();
is.close();
// 显示上传结果
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
// 显示上传失败消息
Toast.makeText(getApplicationContext(), "文件上传失败", Toast.LENGTH_SHORT).show();
}
}
// 获取文件真实路径
public String getRealPathFromURI(Context context, Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
cursor.close();
return path;
}
最后,将文件上传到服务器的 PHP 脚本如下:
<?php
if ($_FILES["file"]["error"] > 0) {
echo "上传失败:".$_FILES["file"]["error"];
} else {
echo "上传成功!";
move_uploaded_file($_FILES["file"]["tmp_name"], "/path/to/save/" . $_FILES["file"]["name"]);
}
?>
这个 PHP 脚本可以接收上传的文件,并将其保存到服务器上指定的目录中。
您好,上传文件到服务器需要经过以下步骤:
- 在客户端编写上传文件的代码(Android平台)。
- 在服务端编写接收文件的代码(PHP)。
- 使用HTTP请求将文件上传到服务器。
以下是代码示例:
Android端上传文件:
private void uploadFile() {
OkHttpClient client = new OkHttpClient();
String url = "http://server.com/upload.php";
File file = new File("/sdcard/myfile.png");
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/png"), file))
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.d(TAG, "file uploaded successfully");
}
}
});
}
其中,URL是服务端的接口地址,file是待上传的文件,通过RequestBody构建请求体,使用OkHttp发起POST请求。
PHP端接收文件:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if(isset($_POST["submit"])) {
if(getimagesize($_FILES["file"]["tmp_name"]) !== false) {
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["file"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
其中,$target_dir是目标文件夹,$target_file是待上传文件路径,使用$_FILES全局变量获取上传文件,使用move_uploaded_file函数将文件从临时位置移动到目标文件夹。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/159081.html