Android -- 图片异步上传到PHP服务器

背景                                                                                          

网上很多上传到java服务器上的,找了好久,找到了上传到php的了,思路跟我当初想的差不多,就是POST过去。废话不多说,直接上图看代码。

php代码                                                                                    


<?php
$target_path = "./upload/";//接收文件目录
$target_path = $target_path . basename( $_FILES[‘uploadedfile‘][‘name‘]);
if(move_uploaded_file($_FILES[‘uploadedfile‘][‘tmp_name‘], $target_path)) {
echo "The file ". basename( $_FILES[‘uploadedfile‘][‘name‘]). " has been uploaded";
} else{
echo "There was an error uploading the file, please try again!" . $_FILES[‘uploadedfile‘][‘error‘];
}
?>

Android代码                                                                              

上传的主要代码:


private void uploadFile(String uploadUrl)
{
String end = "\r\n";
String twoHyphens = "--";
String boundary = "******";
try
{
URL url = new URL(uploadUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();//http连接
// 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃
// 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。
httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K
// 允许输入输出流
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
// 使用POST方法
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");//保持一直连接
httpURLConnection.setRequestProperty("Charset", "UTF-8");//编码
httpURLConnection.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);//POST传递过去的编码

DataOutputStream dos = new DataOutputStream(
httpURLConnection.getOutputStream());//输出流
dos.writeBytes(twoHyphens + boundary + end);
dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""
+ srcPath.substring(srcPath.lastIndexOf("/") + 1)
+ "\""
+ end);
dos.writeBytes(end);

FileInputStream fis = new FileInputStream(srcPath);//文件输入流,写入到内存中
byte[] buffer = new byte[8192]; // 8k
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 = httpURLConnection.getInputStream();//http输入,即得到返回的结果
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
String result = br.readLine();

Toast.makeText(this, result, Toast.LENGTH_LONG).show();//将结果输出
dos.close();
is.close();

} catch (Exception e)
{
e.printStackTrace();
setTitle(e.getMessage());
}
}

因为安卓4.0之后耗时间的操作要求都在非UI线程中操作,即将前面的AsyncTask拿来用了吧~

AsyncTask传送门:http://www.cnblogs.com/yydcdut/p/3707960.html

在这个类中,将上传的操作放在doInBackground当中,可以有ProgressDialog显示上传了多少:


// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);

while (bytesRead > 0) {
outputStream.write(buffer, 0, bufferSize);
length += bufferSize;
progress = (int) ((length * 100) / totalSize);
publishProgress(progress);

bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens
+ lineEnd);
publishProgress(100);

还有就是,注意权限哟:

<uses-permission android:name="android.permission.INTERNET" />

我是天王盖地虎的分割线                                                                 

源代码:http://pan.baidu.com/s/1dD1Qx01

Update.zip

参考:http://blog.csdn.net/sxwyf248/article/details/7012496

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3720635.html

时间: 2025-01-02 19:10:52

Android -- 图片异步上传到PHP服务器的相关文章

微信开发--图片异步上传。

一.需求 微信网页中实现上传头像,用户信息,用户宣传照的功能. 二.问题 微信网页上传普通浏览器的上传不一样,微信内置浏览器禁止了普通的input上传功能,并且此标签在有些移动终端显示不佳. 三.解决 使用微信官方文档提供的jssdk的上传图片接口.微信自己的jssdk里面的图片上传不用考虑兼容性. 具体实现逻辑是: 配置好jssdk后,可以使用jssdk上传接口上传图片到微信服务器,微信服务器会返回给你一个资源id,我们在使用js异步或者表单同步把资源id传输到php服务器端,php服务器端就

C#中使用iframe结合js实现图片异步上传

将图片上传的页面放在iframe中,通过iframe跳转到另一个页面,在该页中将图片提交到服务器,而不需要对主页进行刷新,提交成功后用脚本(回调函数)实现上传的图片在主页面的显示. 图片选择页面 Add.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Add.aspx.cs" Inherits="_Add" %> <!DOCTYPE h

android图片压缩上传系列-service篇

本篇文章是继续上篇android图片压缩上传系列-基础篇文章的续篇.主要目的是:通过Service来执行图片压缩任务来讨论如何使用Service,如何处理任务量大的并发问题. 了解下Service 大家都知道如果有费时任务,这时需要将任务放到后台线程中执行,如果对操作的结果需要通过ui展示还需要在任务完成后通知前台更新.当然对于这种情况,大家也可以在Activity中启动线程,在线程中通过Handler和sendMessage来通知Activity并执行更新ui的操作,但是更好的方法是将这些操作

Android图片文件上传实例

原文:Android图片文件上传实例 源代码下载地址:http://www.zuidaima.com/share/1550463718132736.htm 支持拍照图片上传和从手机相册中获取图片上传到服务器端的功能 源码截图

html5图片异步上传/ 表单提交相关

1 form 表单 get/post提交时候. action地址(或者啥ajax的url地址) 会涉及到跨域问题 常见跨域问题http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html 举例: 第一种写法 相对路径 $.get('localhost:8080/test_upload/aservlet', { }, function (data) { }); test_upload 为项目名 这里写的为相对路径,不会出现问题 第二种

Android APP崩溃上传日志到服务器并且重启!

我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃.但没有一个程序员能保证自己写的程序绝对不会出现异常崩溃.特别是当你用户数达到一定数量级后,你也更容易发现应用不同情况下的崩溃. 对于还没发布的应用程序,我们可以通过测试.分析Log的方法来收集崩溃信息.但对已经发布的程序,我们不可能让用户去查看崩溃信息然后再反馈给开发者.所以,设计一个对于小白用户都可以轻松实现反馈的应用就显得很重要了.我这里结合我自己写的一个Demo,来分析从崩溃开始到崩溃信息反馈到我们服

html+servlet实现多图片异步上传

html页面 <!doctype html> <html> <head> <meta charset="utf-8"> <title>点击上传</title> <script src="js/jquery-1.11.1.js"></script> <script src="js/ajaxfileupload.js"></script&

Android 通过httppost上传文本文件到服务器。

/** * 往服务器上上传文本 比如log日志 * @param urlstr 请求的url * @param uploadFile log日志的路径 * /mnt/shell/emulated/0/LOG/LOG.log * @param newName log日志的名字 LOG.log * @return */ public static void httpPost(Activity activity,String urlstr,String uploadFile,String newNam

asp.net使用jquery.form实现图片异步上传

首先我们需要做准备工作: jquery下载:http://files.cnblogs.com/tianguook/jquery1.8.rar jquery.form.js下载:http://files.cnblogs.com/tianguook/jquery.form.js 页面JqueryFormTest.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="JqueryForm