如何用POST方法上传文件

如何用POST方法上传文件,第1张

POST方法上传文件 随着PHP不断的完善,PHP对文件上传的支持也越来越完美,在PHP 4.0.3以前我们只能用copy() 和 is_uploaded_file()方法结合来上传文件,呵呵,其实就是这样我们也会感觉到PHP相对于ASP来说上传文件要方便很多,这也就是本人选择PHP的一点小小的引以为豪的地方。PHP 4.0.3之后PHP又出了敏团一个新函数move_uploaded_file()。上传文件相对来说又简便了不少,只要这一个函数就行(我可不是说上传文件系统只要就一个函数就足够了,大家可不要误解我的意思,我的意思是move_uploaded_file是上传文件的一个核心函数)。 好薯拿裂了,我们看一个三个函数的讲解(资料来自:PHP手册)。 copy(string source,string desk)将文件从 source 拷贝到 dest。如果成功则返回 TRUE,失败则返回 FALSE。 例: if (!copy($file, $file.'.bak')) { print ("failed to copy $file...<br>\n")} is_uploaded_file(string filename) 如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。 move_uploaded_file(string filename, string destination) 本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。 由三个函数的解释就可以得到一个结论,move_uploaded_file()是copy()和is_uploaded_file()函数的结合 讲了这么半天大家用起这三个函数可能还会有些生疏,下面给大家两个例子: 首先,建立一个前台页面,命名为index.html Code代码如下: <form enctype="multipart/form-data" action="_URL_" method="post">Send this file: <input name="filename" type="file"><input type="submit" value="Send File"></form>1,下面是关于copy()和is_uploaded_file()方法上传文件的方法(保存为:copy.php,上传文件需要将index.html中的_URL_改为copy.php) Code代码如下: <?php $path="./uploadfiles/"if(is_uploaded_file($filename)) //特别注意这里,传递给is_uploaded_file的为$filename,可不要传递$_FILES["filename"]["name"] { $file1=$_FILES["filename"]["name"]//数闭注意这里$_FILES[]方法为PHP4.1.0及以上版本支持,PHP以下的版本要用$HTTP_POST_FILES[]方法 $file2=$path.time().$file1$flag=1} if($flag) $result=copy($_FILES['filename']['tmp_name'],$file2)if($result) echo "上传成功!"?>2,下面是关于move_uploaded_file()方法上传文件的方法(保存为:move.php,上传文件需要将index.html中的_URL_改为move.php) Code代码如下: <?php $path="./uploadfiles/"if($_FILES["filename"]["name"]){ $file1=$_FILES["filename"]["name"]$file2 = $path.time().$file1$flag=1} if($flag) $result=move_uploaded_file($_FILES["filename"]["tmp_name"],$file2)//特别注意这里传递给move_uploaded_file的第一个参数为上传到服务器上的临时文件 if($result) echo "上传成功!"?>文件上传就讲到这里了,这只是两个小程序,其实要完成文件上传所要的代码可不是这些就能了事的。一般还要有文件大小限制,文件扩展名选取,还有一些其它的安全方案。

这不是ajax吗

你这样是不对的 你这衡渗样是把咐羡脊你本地的图片地址传上去了 但是你显示的时候会出现问题 那样你的图片从数据库查出来地址虽然是对的但是它并不在你站点根目录下面所以图片派氏是不能显示的

一、需要用到的场景

在jQuery中使用$.post()就可以方便的发起一个post请求,在android程序中有时也要从服务器获取一些数据,就也必须得使用post请求了。

二、需要用到的主要类

在android中扰敏困使用post请求主要要用到的类是HttpPost、HttpResponse、EntityUtils

三、主要思路

1、创建HttpPost实例,设置需要请求服务器的url。

2、缓念为创建的HttpPost实例设置参数,参数设拿腔置时使用键值对的方式用到NameValuePair类。

3、发起post请求获取返回实例HttpResponse

4、使用EntityUtils对返回值的实体进行处理(可以取得返回的字符串,也可以取得返回的byte数组)

代码也比较简单,注释也加上了,就直接贴出来了

[java]

package com.justsy.url

import java.io.IOException

import java.util.ArrayList

import java.util.List

import org.apache.http.HttpResponse

import org.apache.http.NameValuePair

import org.apache.http.client.ClientProtocolException

import org.apache.http.client.entity.UrlEncodedFormEntity

import org.apache.http.client.methods.HttpPost

import org.apache.http.impl.client.DefaultHttpClient

import org.apache.http.message.BasicNameValuePair

import org.apache.http.protocol.HTTP

import org.apache.http.util.EntityUtils

import android.app.Activity

import android.os.Bundle

public class HttpURLActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

System.out.println("start url...")

String url = "http://192.168.2.112:8080/JustsyApp/Applet"

// 第一步,创建HttpPost对象

HttpPost httpPost = new HttpPost(url)

// 设置HTTP POST请求参数必须用NameValuePair对象

List<NameValuePair>params = new ArrayList<NameValuePair>()

params.add(new BasicNameValuePair("action", "downloadAndroidApp"))

params.add(new BasicNameValuePair("packageId", "89dcb664-50a7-4bf2-aeed-49c08af6a58a"))

params.add(new BasicNameValuePair("uuid", "test_ok1"))

HttpResponse httpResponse = null

try {

// 设置httpPost请求参数

httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8))

httpResponse = new DefaultHttpClient().execute(httpPost)

//System.out.println(httpResponse.getStatusLine().getStatusCode())

if (httpResponse.getStatusLine().getStatusCode() == 200) {

// 第三步,使用getEntity方法活得返回结果

String result = EntityUtils.toString(httpResponse.getEntity())

System.out.println("result:" + result)

T.displayToast(HttpURLActivity.this, "result:" + result)

}

} catch (ClientProtocolException e) {

e.printStackTrace()

} catch (IOException e) {

e.printStackTrace()

}

System.out.println("end url...")

setContentView(R.layout.main)

}

}

ADD:使用HttpURLConnection 进行post请求

[java]

String path = "http://192.168.2.115:8080/android-web-server/httpConnectServlet.do?PackageID=89dcb664-50a7-4bf2-aeed-49c08af6a58a"

URL url = new URL(path)

HttpURLConnection conn = (HttpURLConnection) url.openConnection()

conn.setRequestMethod("POST")

conn.setConnectTimeout(5000)

System.out.println(conn.getResponseCode())

============================================================================================================================

通过get和post方式向服务器发送请求

首先说一下get和post的区别

get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23&jjj=888

但是这种形式对于那种比较隐私的参数是不适合的,而且参数的大小也是有限制的,一般是1K左右吧,对于上传文件

就不是很适合。

post请求方式是将参数放在消息体内将其发送到服务器,所以对大小没有限制,对于隐私的内容也比较合适。

如下Post请求

POST /LoginCheck HTTP/1.1

Accept: text/html, application/xhtml+xml, */*

Referer: http://192.168.2.1/login.asp

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatibleMSIE 9.0Windows NT 6.1Trident/5.0BOIE9ZHCN)

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Host: 192.168.2.1

Content-Length: 39

Connection: Keep-Alive

Cache-Control: no-cache

Cookie: language=en

Username=admin&checkEn=0&Password=admin //参数位置

在android中用get方式向服务器提交请求:

在android模拟器中访问本机中的tomcat服务器时,注意:不能写localhost,因为模拟器是一个单独的手机系统,所以要写真是的IP地址。

否则无法访问到服务器。

//要访问的服务器地址,下面的代码是要向服务器提交用户名和密码,提交时中文先要经过URLEncoder编码,因为模拟器默认的编码格式是utf-8

//而tomcat内部默认的编码格式是ISO8859-1,所以先将参数进行编码,再向服务器提交。

private String address = "http://192.168.2.101:80/server/loginServlet"

public boolean get(String username, String password) throws Exception {

username = URLEncoder.encode(username)// 中文数据需要经过URL编码

password = URLEncoder.encode(password)

String params = "username=" + username + "&password=" + password

//将参数拼接在URl地址后面

URL url = new URL(address + "?" + params)

//通过url地址打开连接

HttpURLConnection conn = (HttpURLConnection) url.openConnection()

//设置超时时间

conn.setConnectTimeout(3000)

//设置请求方式

conn.setRequestMethod("GET")

//如果返回的状态码是200,则一切Ok,连接成功。

return conn.getResponseCode() == 200

}

在android中通过post方式提交数据。

public boolean post(String username, String password) throws Exception {

username = URLEncoder.encode(username)// 中文数据需要经过URL编码

password = URLEncoder.encode(password)

String params = "username=" + username + "&password=" + password

byte[] data = params.getBytes()

URL url = new URL(address)

HttpURLConnection conn = (HttpURLConnection) url.openConnection()

conn.setConnectTimeout(3000)

//这是请求方式为POST

conn.setRequestMethod("POST")

//设置post请求必要的请求头

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")// 请求头, 必须设置

conn.setRequestProperty("Content-Length", data.length + "")// 注意是字节长度, 不是字符长度

conn.setDoOutput(true)// 准备写出

conn.getOutputStream().write(data)// 写出数据

return conn.getResponseCode() == 200

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12286140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存