玩转安卓服务器:轻松上传图片实现远程存储 (安卓服务器上传图片)
在当今信息化高速发展的时代,基于安卓服务器上传图片远程存储,已经成为现代企业、个人应用及各行各业必备的一项重要技术。安卓服务器,作为一种开源的技术,已经广泛应用于个人及企业信息系统中。
本文将给大家介绍如何玩转安卓服务器,轻松上传图片实现远程存储的操作流程与技术知识点。通过本篇文章的阅读,相信您能够得到有用的指导及帮助,更加高效地在使用安卓服务器上实现远程存储。
之一部分:什么是安卓服务器?
安卓服务器,简称是安卓开发服务器。它是一种集成开发环境,相当于拥有了网络操作系统(NOP)的功能。安卓服务器能够实现在安卓系统中运行的服务器应用程序的开发与调试,支持创建各种服务器应用,并能够迅速在多种服务器应用中替换和修改需要更改的部分。
开发安卓服务器应用程序,需要掌握Java等相关技术,在此之前,需要先准备好自己的基本环境,例如安装JDK和安装开发工具(Android Studio),在得到环境准备完全之后,就能够着手进行安卓服务器的开发了。
第二部分:安卓服务器如何上传图片实现远程存储?
现在,让我们开始探讨如何通过安卓服务器上传图片实现远程存储。
启动安卓开发工具(Android Studio)并创建一个新项目。在创建该项目时,您需要开发一个安卓服务器的应用程序。
在这个应用程序中,我们需要添加一些类(类文件),例如文件上传的类(FileUploadServlet)和扇形进度条的类(SectorProgressView)。在接下来的步骤中,我们将用到这些类文件。
接下来,我们需要创建一个Servlet,来实现图片的上传功能。在实现过程中,我们需要用到Apache Common的上传工具类(commons-fileupload)。
在Servlet中,我们需要编写一个doPost()方法,来处理上传任务。下面是一个完整的示例代码解析。
“`java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding(“UTF-8”);
// 用于存储上传后的图片路径
String imagePath = “”;
// 获得服务器图片存储目录的路径
String rootPath = request.getServletContext().getRealPath(“/”);
try {
// 解析请求中的图片文件
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload uploader = new ServletFileUpload(factory);
uploader.setFileSizeMax(1024 * 1024 * 10);
uploader.setSizeMax(1024 * 1024 * 100);
List items = uploader.parseRequest(request);
for (Iterator i = items.iterator(); i.hasNext(); ) {
FileItem item = (FileItem) i.next();
if (!item.isFormField()) {
// 生成新的图片文件名,以免重名
String fileName = new Date().getTime() + “-” + item.getName();
// 上传到服务器
File uploadedFile = new File(rootPath + “assets/images/” + fileName);
item.write(uploadedFile);
imagePath = “assets/images/” + fileName;
break;
}
}
} catch(Exception ex) {
System.err.println(“错误信息:” + ex.getMessage());
}
response.setContentType(“text/pln”);
PrintWriter out = response.getWriter();
out.write(imagePath);
out.flush();
out.close();
}
“`
这里的代码,用到了Apache的文件上传工具,在上传成功的情况下,返回了图片保存的路径(imagePath)。
图片实现远程存储还需要一个服务支持,例如Tomcat容器服务器。在Tomcat容器服务器中,我们需要在Web容器中配置Servlet的映射,如下图所示:
![Tomcat](https://s3-us-west-2.amazonaws.com/s.cdpn.io/1500454/tomcat.png)
第三部分:如何使用Android客户端上传图片至安卓服务器?
在前两个部分中,我们已经介绍了如何使用安卓服务器实现图片上传的功能。现在,我们来讲讲如何使用Android客户端进行图片上传。
在Android客户端开发中,我们首先需要创建一个视图(View),用于实现图片选择和上传的逻辑。
此处,我们以扇形进度条(SectorProgressView)为例,为我们的上传视图设置以下属性:
“`xml
android:id=”@+id/sectorProgressView”
android:layout_width=”200dp”
android:layout_height=”200dp”
android:layout_centerInParent=”true”
sector:animation_duration=”8000″
sector:sector_gap=”2dp”
sector:sector_width=”4dp”/>
“`
在设置完视图的相关属性后,我们需要通过异步任务(AsyncTask)实现图片上传的逻辑。
异步任务可以理解为一种负责执行耗时操作的线程,该线程不会影响主线程的执行时间。
下面是一个完整的AsyncTask对选取的图片进行上传任务的代码实现:
“`java
private class UploadTask extends AsyncTask {
@Override protected void onPreExecute() {
sectorProgressView.start();
super.onPreExecute();
}
@Override
protected String doInBackground(String… params) {
String filePath = params[0];
File file = new File(filePath);
if (!file.exists()) {
return “-1”;
}
String url = “http://www.example.com/image-upload”;
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
try {
builder.addBinaryBody(“file”, new FileInputStream(file), ContentType.create(“image/jpeg”), file.getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
return “-2”;
}
final HttpEntity entity = builder.build();
post.setEntity(entity);
try {
final HttpResponse response = client.execute(post);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
final HttpEntity responseEntity = response.getEntity();
final InputStream inputStream = responseEntity.getContent();
String bodyAsString = EntityUtils.toString(responseEntity);
return bodyAsString;
} else {
return “-3;statusCode:” + statusCode;
}
} catch (IOException e) {
e.printStackTrace();
return “-3”;
}
}
@Override
protected void onPostExecute(String result) {
sectorProgressView.reset();
if (!result.startsWith(“-“)) {
Toast.makeText(MnActivity.this, “上传成功” + result, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MnActivity.this, “上传失败” + result, Toast.LENGTH_LONG).show();
}
super.onPostExecute(result);
}
}
“`
异步任务实现了使用url上传图片,并在上传前启动了进度条。
我们还需要在客户端应用程序中,调用这个异步任务来开始图片上传功能的逻辑。
“`java
findViewById(R.id.btnUpload).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(“image/*”);
startActivityForResult(intent, REQUEST_PICK);
}
});
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_PICK) {
final String filePath = “file://” + getAbsolutePathFromUri(data.getData());
new UploadTask().execute(filePath); // 图片上传任务
}
}
“`