PS:便宜的服务器可是会不定时的坑你一把。
今天在修改app的一些交互以及重构代码。一切都是那么顺利,啪啪啪,runing,测试没问题,再啪啪啪。。。
突然,测试上传头像的时候,老是连接超时。。。。报如下错误:
XXXXXXSokcetTimeOutXXXXXXXX
然后自己设置HTTP的超时时间:
//设置超时时间 httpclient.setTimeout(20000);
再building,runing,还是不行。。。。这就怪了,明明好好的,怎么会突然就变成连接超时了呢!又折腾了一阵子后,也跟后台那边的朋友沟通过,他也测试了上传接口,发现没什么问题,就让我自己去折腾去了。。。。
我就郁闷了,看不出原先的代码有什么错误,也没什么法子了,就出最下下策吧,自己搭一个PHP上传图片接口,亲自测试下到底是怎么回事。。。。
1.首先,你得下一个方便快捷的PHP服务器,我这里用了WampServer,百度----下载-----安装-----启动,浏览器输入:http://127.0.0.1 有页面显示,OK了。就这么简单!
2.浏览器输入 : http://本机IP地址 回车, 发现报错,类似“You don't have permission to access / on this server” 说明你的WM还没设置,需要进行如下设置:
造成这个问题的原因是Apache 的http.conf内的默认配置是
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
只允许127.0.0.1访问,点击wampserver图标让后点击Putonline,http.conf内的以上默认配置自动修改为
# onlineoffline tag - don't remove
Order Allow,Deny
Allow from all
现在localhost可以访问了。
同样phpMyadmin在localhost下不能正常访问在127.0.0.1能正常访问,解决方法:
点击根目录下的alias目录,打开phpmyadmin.conf配置文件,和上面修改http.conf一样把
Deny from all
Allow from 127.0.0.1
修改为
Allow from all
3. 再此输入 : http://本机IP地址 回车 显示页面 OK! 至于为什么要第二步、第三步呢,我就不说了。。。留给新人去想想吧! 大神直接无视。。。。。
4.写一个上传图片的PHP文件,当然我一个敲java的孩子一下子怎么可能憋的出来,那怎么办,当然是百度参考别人的了,下面的PHP代码源自网络,亲测没有错误:
<?php $base_path = "./upload/"; //存放目录if(!is_dir($base_path)){ mkdir($base_path,0777,true);}$target_path = $base_path . basename ( $_FILES ['attach'] ['name'] );if (move_uploaded_file ( $_FILES ['attach'] ['tmp_name'], $target_path )) { $array = array ( "status" => true, "msg" => $_FILES ['attach'] ['name'] ); echo json_encode ( $array );} else { $array = array ( "status" => false, "msg" => "There was an error uploading the file, please try again!" . $_FILES ['attach'] ['error'] ); echo json_encode ( $array );}?>
5.将上面的php文件放在WM安装目录下的www目录下,我的如下图所示,仅供参考:
6.经过上面几个步骤,PHP端已经搭建好了,现在就是回到android端改改IP地址测试下就oK了,代码段如下:
//HTTP上传图片 RequestParams params = new RequestParams(); try { //将压缩后的bitmap保存为图片文件 String saveImgPath=getSD_Path()+"/saveimg.png"; File saveimg=new File(saveImgPath); FileOutputStream fos = new FileOutputStream(saveimg); bmp.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); //上传压缩后的文件,大约100k左右 File uploadImg=new File(saveImgPath); <span style="color:#ff0000;">params.put("attach", uploadImg);</span> } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //上传地址// String url=URLConfigs.UploadHeadImage_ukey+myprefs.Ukey().get(); <span style="color:#ff0000;">String url="http://192.168.0.8/upload.php";</span>// LogUtil.e(TAG, "upload img url :"+url); AsyncHttpUtil.post_loading(context,url, params, new MyTextHttpResponseHandler() { @Override public void onSuccess(int status, Header[] arg1, String json) { super.onSuccess(status, arg1, json); LogUtil.e(TAG, "上传图片 json :"+json); RespondBaseEntity entity=GsonUtil.GetFromJson(json, RespondBaseEntity.class); if(entity.isStatus()){ //上传成功,设置图片 face.setImageBitmap(bmp); ToastUtils.show(context, "上传成功"); }else{ ToastUtils.show(context, json); } myprefs.position().put(0); } @Override public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) { super.onFailure(arg0, arg1, arg2, arg3); myprefs.position().put(0);// arg3.printStackTrace(); ToastUtils.show(context, R.string.network_unavailable); }
params.put("attach", uploadImg); 这里的attach参数是和服务端一一对应的,别乱改。。。。
String url="http://192.168.0.8/upload.php"; 这个192.168.0.8是我的PHP部署的地址,改成你自己的就行了。
PS:别犯2,用了127.0.0.1 想想为啥不能用127.0.0.1
到此就是building,runing了。 发现OK。。。。 可以上传,并在www目录下找到upload目录,upload目录下有上传的图片。。。。
7.这就纳闷了。。。。 我又鼓起勇气找了PHP后端,跟他激烈的讨论一番后,发现是服务器坑了爹啊! 800块一年的服务器。。。。。唉。。。不说了。。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。

CSP重要因为它能防范XSS攻击和限制资源加载,提升网站安全性。1.CSP是HTTP响应头的一部分,通过严格策略限制恶意行为。2.基本用法是只允许从同源加载资源。3.高级用法可设置更细粒度的策略,如允许特定域名加载脚本和样式。4.使用Content-Security-Policy-Report-Only头部可调试和优化CSP策略。

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

HTTPS是一种在HTTP基础上增加安全层的协议,主要通过加密数据保护用户隐私和数据安全。其工作原理包括TLS握手、证书验证和加密通信。实现HTTPS时需注意证书管理、性能影响和混合内容问题。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器