PalapaWEB 安卓PHP服务器_Android -- 图片异步上传到PHP服务器

背景

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

php代码

$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 voiduploadFile(String uploadUrl)

{

String end= "\r\n";

String twoHyphens= "--";

String boundary= "******";try{

URL url= newURL(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= newDataOutputStream(

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= newBufferedReader(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拿来用了吧~

在这个类中,将上传的操作放在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);

还有就是,注意权限哟:

我是天王盖地虎的分割线

Update.zip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个运行于 安卓系统的 小型web服务器,包括php/mysql 配置文件可以修改,另外可以用phpmyadmin 管理数据库。 让你的手机立刻变身小型服务器。 =============================== Turn your Android devices into a web and database server with Palapa Web Server, a suite of web developer. This application has been designed for low memory consumption and CPU usage, specially used for smartphone and tablet. Hey, it's free and you don't need a root access to run Palapa Web Server! # Requirements - Internal memory should not be less than 50MB! - ARM based processor - Minimum Android 2.2 Froyo # Features - Lighttpd 1.4.32 - PHP 5.5.1 - MySQL 5.1.69 - Msmtp 1.4.31 - phpMyAdmin 4.0.4.1 - Web Admin 1.0.1 # Default Document Root - Path : /sdcard/pws/www/ # Default URL - Address : http://127.0.0.1:8080/ # Web Admin Informations - Address : http://127.0.0.1:9999 - Username : admin - Password : admin # MySQL Informations - Host : localhost (127.0.0.1) - Port : 3306 - Username : root - Password : adminadmin # phpMyAdmin Informations - Address : http://127.0.0.1:9999/phpmyadmin - Username : root - Password : adminadmin # Problem? If something is not working properly, please try to restart your phone. # Known Issues As you know, compatibility issue is a big problem of Android phone, I can't test it in all phones. So if it can't work for your phone, just uninstall it, I'm sorry to waste your time. You also can send a mail to let me know your phone model, if I solve it, I will let you know.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值