我正在使用 localhost for php。
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import android.util.Log;
public class ImageUpload {
HttpURLConnection _httpurlconnection;
DataOutputStream _dos;
DataInputStream _dis;
String _serverurl="http://192.168.1.11/project/imageupload.php";
String _lineend= "'r'n";
String _twohyphens= "--";
String _boundry="*****";
int _bytesread, _bytesavailable, _buffersize;
byte[] _buffer;
int _maxbuffersize = 1 * 1024 * 1024;
public void uploadImage(String _filepath) {
try {
FileInputStream _fis = new FileInputStream(new File(_filepath));
URL _url = new URL(_serverurl);
_httpurlconnection = (HttpURLConnection) _url.openConnection();
_httpurlconnection.setDoInput(true);
_httpurlconnection.setDoOutput(true);
_httpurlconnection.setUseCaches(false);
_httpurlconnection.setRequestMethod("POST");
_httpurlconnection.setRequestProperty("Connection", "Keep-Alive");
_httpurlconnection.setRequestProperty("Connection-Type",
"multipart/form-data;boundry=" + _boundry);
_dos = new DataOutputStream(_httpurlconnection.getOutputStream());
_dos.writeBytes(_twohyphens + _boundry + _lineend);
_dos.writeBytes("Content-Disposition: form-data; name='"uploadedfile'";filename='""
+ _filepath + "'"" + _lineend);
_dos.writeBytes(_lineend);
_bytesavailable = _fis.available();
_buffersize = Math.min(_bytesavailable, _maxbuffersize);
_buffer = new byte[_buffersize];
_bytesread = _fis.read(_buffer, 0, _buffersize);
while (_bytesread > 0) {
_dos.write(_buffer, 0, _buffersize);
_bytesavailable = _fis.available();
_buffersize = Math.min(_bytesavailable, _maxbuffersize);
_bytesread = _fis.read(_buffer, 0, _buffersize);
}
_dos.writeBytes(_lineend);
_dos.writeBytes(_twohyphens + _boundry + _twohyphens + _lineend);
int responsecode = _httpurlconnection.getResponseCode();
String responsemessage = _httpurlconnection.getResponseMessage();
_fis.close();
_dos.flush();
_dos.close();
BufferedReader br=new BufferedReader(new InputStreamReader(_httpurlconnection.getInputStream()));
String line;
while((line=br.readLine())!=null)
{
Log.i("----------------",">>"+line);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的PHP代码。
<?php
$target_path = "/var/www/project";
$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!";
}
?>
但是我收到通知:未定义的索引:第 5 行上传的文件。谁能帮我解决这个问题?
看起来您提供给服务器的_filepath
文件夹在服务器上不存在。
未定义的索引警告显示,无论出于何种原因,请求中都不存在文件uploadedfile
。
此问题有一些常见的警告,最初与 php.ini 文件中的配置指令有关。
- 您的上传大小上限是否设置得足够高? 这些都在
max_post_size
和upload_max_filesize
指令中。 - 对于大文件,上传的超时时间是否足够长?
max_execution_time
- 上载的临时文件的路径是否配置正确且可写?
范围,错误通常在于客户端代码,无论是html/js和Web浏览器中表单中被遗忘的enctype
,还是移动设备上的本机代码,就像您一样。
我建议查看 android 库来帮助您构建请求对象,因为这对于multipart
类型的请求可能很棘手。 有一些方法可以使用org.apache
库来做到这一点,这些库不需要像您尝试的那样编写请求的实际文本。
http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http-post-multi-part/