有个html页面,用html里面自带的
一、Android端实现文件上传1、新建一个Android项目命名为androidUpload。2、新建FormFile类,用来封装文件信息。)、新建SocketHttpRequester类,封装上传文件到服务器代码。4、新建MainActivity类,实现每隔5秒上传一次。5、修改清单文件。
二、服务器端用来获取Android端上传过来的文件信息1、新建一个web项目命名为upload。注意:记得加入struts2jar包。2、新建action类,命名为UploadAction。3、配置struts.xml。4、配置web.xml。
② android中如何上传图片到FTP服务器
android客户端实现FTP文件需要用到 commons-net-3.0.1.jar
先将jar包复制到android libs目录下
复制以下实现代码
以下为实现代码:
 	/**
		 * 通过ftp上传文件
		 * @param url ftp服务器地址 如: 
		 * @param port 端口如 : 
		 * @param username  登录名
		 * @param password   密码
		 * @param remotePath  上到ftp服务器的磁盘路径
		 * @param fileNamePath  要上传的文件路径
		 * @param fileName 要上传的文件名
		 * @return
		 */
	 public String ftpUpload(String url, String port, String username,String password, String remotePath, String fileNamePath,String fileName) {
		 FTPClient ftpClient = new FTPClient();
		 FileInputStream fis = null;
		 String returnMessage = "0";
		 try {
			 ftpClient.connect(url, Integer.parseInt(port));
			 boolean loginResult = ftpClient.login(username, password);
			 int returnCode = ftpClient.getReplyCode();
			 if (loginResult && FTPReply.isPositiveCompletion(returnCode)) {// 如果登录成功
				 ftpClient.makeDirectory(remotePath);
				 // 设置上传目录
				 ftpClient.changeWorkingDirectory(remotePath);
				 ftpClient.setBufferSize(1024);
				 ftpClient.setControlEncoding("UTF-8");
				 ftpClient.enterLocalPassiveMode();
						 fis = new FileInputStream(fileNamePath + fileName);
				 ftpClient.storeFile(fileName, fis);
				 
				 returnMessage = "1";   //上传成功 		
			 } else {// 如果登录失败
				 returnMessage = "0";
				 }
} catch (IOException e) {
			 e.printStackTrace();
			 throw new RuntimeException("FTP客户端出错!", e);
		 } finally {
			 //IOUtils.closeQuietly(fis);
		 try {
			 ftpClient.disconnect();
		 } catch (IOException e) {
			 	e.printStackTrace();
			 	throw new RuntimeException("关闭FTP连接发生异常!", e);
		 	}
		 }
		 return returnMessage;
	 }
③ android 怎么写上传图片代码
请问图片是放在android手机的哪个地方,要在android手机怎么显示返回呢,主类中有个按钮来添加图片,还有一个按钮是用来上传图片,然后写个监听,
④ 安卓如何在后台上传图片等资料
public class EX08_11 extends Activity  
{  
  /* 变量声明 
   * newName:上传后在服务器上的文件名称 
   * uploadFile:要上传的文件路径 
   * actionUrl:服务器对应的程序路径 */  
//  private String newName="345444.jpg";  
  private String uploadFile="/sdcard/345444.jpg";  
  private String actionUrl="http://*********/upload.PHP";  
  private TextView mText1;  
  private TextView mText2;  
  private Button mButton;  
    
  @Override  
  public void onCreate(Bundle savedInstanceState)  
  {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
  
    mText1 = (TextView) findViewById(R.id.myText2);  
    mText1.setText("文件路径:/n"+uploadFile);  
      
    mText2 = (TextView) findViewById(R.id.myText3);  
    mText2.setText("上传网址:/n"+actionUrl);  
    /* 设定mButton的onClick事件处理 */      
    mButton = (Button) findViewById(R.id.myButton);  
    mButton.setOnClickListener(new View.OnClickListener()  
    {  
      public void onClick(View v)  
      {  
        uploadFile();  
      }  
    });  
  }  
    
  /* 上传文件吹Server的method */  
  private void uploadFile()  
  {  
//    String end = "/r/n";  
//    String twoHyphens = "--";  
    String boundary = "*****";  
    try  
    {  
      URL url =new URL(actionUrl);  
      HttpURLConnection con=(HttpURLConnection)url.openConnection();  
      /* 允许Input、Output,不使用Cache */  
//      con.setReadTimeout(5 * 1000);   
      con.setDoInput(true);  
      con.setDoOutput(true);  
      con.setUseCaches(false);  
      /* 设定传送的method=POST */  
      con.setRequestMethod("POST");  
      /* setRequestProperty */  
      con.setRequestProperty("Connection", "Keep-Alive");  
      con.setRequestProperty("Charset", "UTF-8");  
      con.setRequestProperty("enctype",  
                         "multipart/form-data;boundary="+boundary);  
      /* 设定DataOutputStream */  
      DataOutputStream ds =   
        new DataOutputStream(con.getOutputStream());  
      /*ds.writeBytes(twoHyphens + boundary + end); 
      ds.writeBytes("Content-Disposition: form-data; " + 
                    "name=/"file1/";filename=/"" + 
                    newName +"/"" + end); 
      ds.writeBytes(end);  */   
  
      /* 取得文件的FileInputStream */  
      FileInputStream fStream = new FileInputStream(uploadFile);  
      /* 设定每次写入1024bytes */  
      int bufferSize = 1024;  
      byte[] buffer = new byte[bufferSize];  
  
      int length = -1;  
      /* 从文件读取数据到缓冲区 */  
      while((length = fStream.read(buffer)) != -1)  
      {  
        /* 将数据写入DataOutputStream中 */  
        ds.write(buffer, 0, length);  
      }  
//      ds.writeBytes(end);  
//      ds.writeBytes(twoHyphens + boundary + twoHyphens + end);  
  
      /* close streams */  
      fStream.close();  
      ds.flush();  
/* 取得Response内容 */  
      InputStream is = con.getInputStream();  
      int ch;  
      StringBuffer b =new StringBuffer();  
      while( ( ch = is.read() ) != -1 )  
      {  
        b.append( (char)ch );  
      }  
      /* 将Response显示于Dialog */  
      showDialog(b.toString().trim());  
      /* 关闭DataOutputStream */  
      ds.close();  
    }  
    catch(Exception e)  
    {  
      showDialog(""+e);  
    }  
  }  
    
  /* 显示Dialog的method */  
  private void showDialog(String mess)  
  {  
    new AlertDialog.Builder(EX08_11.this).setTitle("Message")  
     .setMessage(mess)  
     .setNegativeButton("确定",new DialogInterface.OnClickListener()  
     {  
       public void onClick(DialogInterface dialog, int which)  
       {            
       }  
     })  
     .show();  
  }  
}  
PHP代码
[php] view plain 
$data = file_get_contents('php://input');  
$handle = fopen($_SERVER['DOCUMENT_ROOT'].'/image/345444.jpg', 'w');  
if ($handle)  
{  
 fwrite($handle,$data);  
 fclose($handle);  
 echo "success";  
}
⑤ android如何实现图片批量上传
首先,以下架构下的批量文件上传可能会失败或者不会成功:
            1.android客户端+springMVC服务端:服务端采用org.springframework.web.multipart.MultipartHttpServletRequest作为批量上传接收类,这种搭配下的批量文件上传会失败,最终服务端只会接受到一个文件,即只会接受到第一个文件。可能因为MultipartHttpServletRequest对servlet原本的HttpServletRequest类进行封装,导致批量上传有问题。
             2.android客户端+strutsMVC服务端:
上传成功的方案:
          采用android客户端+Servlet(HttpServletRequest)进行文件上传。
          Servlet端代码如下:
[java] view plainprint?
DiskFileItemFactory factory = new DiskFileItemFactory();  
        ServletFileUpload upload = new ServletFileUpload(factory);  
        try  
        {  
            List items = upload.parseRequest(request);  
            Iterator itr = items.iterator();  
            while (itr.hasNext())  
            {  
                FileItem item = (FileItem) itr.next();  
                if (item.isFormField())  
                {  
                    System.out.println("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8"));  
                }   
                else  
                {  
                    if (item.getName() != null && !item.getName().equals(""))  
                    {  
                        System.out.println("上传文件的大小:" + item.getSize());  
                        System.out.println("上传文件的类型:" + item.getContentType());  
                        // item.getName()返回上传文件在客户端的完整路径名称  
                        System.out.println("上传文件的名称:" + item.getName());  
  
                        File tempFile = new File(item.getName());  
                        // 上传文件的保存路径  
                        File file = new File(sc.getRealPath("/") + savePath, tempFile.getName());  
                        item.write(file);  
                        request.setAttribute("upload.message", "上传文件成功!");  
                    } else  
                    {  
                        request.setAttribute("upload.message", "没有选择上传文件!");  
                    }  
                }  
            }  
        }   
        catch (FileUploadException e)  
        {  
            e.printStackTrace();  
        }   
        catch (Exception e)  
        {  
            e.printStackTrace();  
            request.setAttribute("upload.message", "上传文件失败!");  
        }  
        request.getRequestDispatcher("/uploadResult.jsp").forward(request, response);  
android端代码如下:
[java] view plainprint?
public class SocketHttpRequester {  
    /** 
     *多文件上传 
     * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能: 
     *   <FORM METHOD=POST ACTION="http://192.168.1.101:8083/upload/servlet/UploadServlet" enctype="multipart/form-data"> 
            <INPUT TYPE="text" NAME="name"> 
            <INPUT TYPE="text" NAME="id"> 
            <input type="file" name="imagefile"/> 
            <input type="file" name="zip"/> 
         </FORM> 
     * @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.iteye.cn或http://192.168.1.101:8083这样的路径测试) 
     * @param params 请求参数 key为参数名,value为参数值 
     * @param file 上传文件 
     */  
    public static boolean post(String path, Map<String, String> params, FormFile[] files) throws Exception{       
        final String BOUNDARY = "---------------------------7da2137580612"; //数据分隔线  
        final String endline = "--" + BOUNDARY + "--\r\n";//数据结束标志  
          
        int fileDataLength = 0;  
        for(FormFile uploadFile : files){//得到文件类型数据的总长度  
            StringBuilder fileExplain = new StringBuilder();  
             fileExplain.append("--");  
             fileExplain.append(BOUNDARY);  
             fileExplain.append("\r\n");  
             fileExplain.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");  
             fileExplain.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");  
             fileExplain.append("\r\n");  
             fileDataLength += fileExplain.length();  
            if(uploadFile.getInStream()!=null){  
                fileDataLength += uploadFile.getFile().length();  
             }else{  
                 fileDataLength += uploadFile.getData().length;  
             }  
        }  
        StringBuilder textEntity = new StringBuilder();  
        for (Map.Entry<String, String> entry : params.entrySet()) {//构造文本类型参数的实体数据  
            textEntity.append("--");  
            textEntity.append(BOUNDARY);  
            textEntity.append("\r\n");  
            textEntity.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");  
            textEntity.append(entry.getValue());  
            textEntity.append("\r\n");  
        }  
        //计算传输给服务器的实体数据总长度  
        int dataLength = textEntity.toString().getBytes().length + fileDataLength +  endline.getBytes().length;  
          
        URL url = new URL(path);  
        int port = url.getPort()==-1 ? 80 : url.getPort();  
        Socket socket = new Socket(InetAddress.getByName(url.getHost()), port);             
        OutputStream outStream = socket.getOutputStream();  
        //下面完成HTTP请求头的发送  
        String requestmethod = "POST "+ url.getPath()+" HTTP/1.1\r\n";  
        outStream.write(requestmethod.getBytes());  
        String accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";  
        outStream.write(accept.getBytes());  
        String language = "Accept-Language: zh-CN\r\n";  
        outStream.write(language.getBytes());  
        String contenttype = "Content-Type: multipart/form-data; boundary="+ BOUNDARY+ "\r\n";  
        outStream.write(contenttype.getBytes());  
        String contentlength = "Content-Length: "+ dataLength + "\r\n";  
        outStream.write(contentlength.getBytes());  
        String alive = "Connection: Keep-Alive\r\n";  
        outStream.write(alive.getBytes());  
        String host = "Host: "+ url.getHost() +":"+ port +"\r\n";  
        outStream.write(host.getBytes());  
        //写完HTTP请求头后根据HTTP协议再写一个回车换行  
        outStream.write("\r\n".getBytes());  
        //把所有文本类型的实体数据发送出来  
        outStream.write(textEntity.toString().getBytes());             
        //把所有文件类型的实体数据发送出来  
        for(FormFile uploadFile : files){  
            StringBuilder fileEntity = new StringBuilder();  
             fileEntity.append("--");  
             fileEntity.append(BOUNDARY);  
             fileEntity.append("\r\n");  
             fileEntity.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");  
             fileEntity.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");  
             outStream.write(fileEntity.toString().getBytes());  
             if(uploadFile.getInStream()!=null){  
                 byte[] buffer = new byte[1024];  
                 int len = 0;  
                 while((len = uploadFile.getInStream().read(buffer, 0, 1024))!=-1){  
                     outStream.write(buffer, 0, len);  
                 }  
                 uploadFile.getInStream().close();  
             }else{  
                 outStream.write(uploadFile.getData(), 0, uploadFile.getData().length);  
             }  
             outStream.write("\r\n".getBytes());  
        }  
        //下面发送数据结束标志,表示数据已经结束  
        outStream.write(endline.getBytes());  
          
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
        if(reader.readLine().indexOf("200")==-1){//读取web服务器返回的数据,判断请求码是否为200,如果不是200,代表请求失败  
            return false;  
        }  
        outStream.flush();  
        outStream.close();  
        reader.close();  
        socket.close();  
        return true;  
    }  
      
    /**  
     *单文件上传  
     * 提交数据到服务器  
     * @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.itcast.cn或http://192.168.1.10:8080这样的路径测试)  
     * @param params 请求参数 key为参数名,value为参数值  
     * @param file 上传文件  
     */  
    public static boolean post(String path, Map<String, String> params, FormFile file) throws Exception{  
       return post(path, params, new FormFile[]{file});  
    }  
}
⑥ 安卓上传图片代码,c#服务器端接收代码,在线等,急。。。
varstr=Requst.InputStream;
StreamReadersr=newStreamReader(str);
varb=sr.ReadToEnd();
File.WriteAllBytes("文件路径",b);
⑦ android 上传图片或文件都是怎么弄的
一:可以使用httppost上传文件
二:或者socket写入文件
上面两种都可以获得二进制流,然后把文件写入流,这一类网络操作最好使用异步任务模型
⑧ Android 使用OkhttpUtils上传图片
IMAGE_FILE_NAME这个确定是文件路径么?
那个其他我看不出来,我上传图片用的都是Xutils,你可以搜搜试试。
⑨ android怎样上传图片到服务器
界面很简单,点击 【选择图片】,从图库里选择图片,显示到下面的imageview里,点击上传,就会上传到指定的服务器
布局文件:
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="选择图片" 
    android:id="@+id/selectImage" 
    /> 
    <Button   
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="上传图片" 
    android:id="@+id/uploadImage" 
    /> 
     <ImageView   
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:id="@+id/imageView" 
    /> 
</LinearLayout>
Upload Activity:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
   
public class Upload extends Activity implements OnClickListener {
    private static String requestURL = "http://192.168.1.212:8011/pd/upload/fileUpload.do";
    private Button selectImage, uploadImage;
    private ImageView imageView;
 
    private String picPath = null;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.upload);
 
        selectImage = (Button) this.findViewById(R.id.selectImage);
        uploadImage = (Button) this.findViewById(R.id.uploadImage);
        selectImage.setOnClickListener(this);
        uploadImage.setOnClickListener(this);
 
        imageView = (ImageView) this.findViewById(R.id.imageView);
 
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.selectImage:
            /***
             * 这个是调用android内置的intent,来过滤图片文件 ,同时也可以过滤其他的
             */
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent, 1);
            break;
        case R.id.uploadImage:
            if (picPath == null) {
 
                Toast.makeText(Upload.this, "请选择图片!", 1000).show();
            } else {
                final File file = new File(picPath);
 
                if (file != null) {
                    String request = UploadUtil.uploadFile(file, requestURL);
                    uploadImage.setText(request);
                }
            }
            break;
        default:
            break;
        }
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            /**
             * 当选择的图片不为空的话,在获取到图片的途径
             */
            Uri uri = data.getData();
            Log.e(TAG, "uri = " + uri);
            try {
                String[] pojo = { MediaStore.Images.Media.DATA };
 
                Cursor cursor = managedQuery(uri, pojo, null, null, null);
                if (cursor != null) {
                    ContentResolver cr = this.getContentResolver();
                    int colunm_index = cursor
                            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    cursor.moveToFirst();
                    String path = cursor.getString(colunm_index);
                    /***
                     * 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,
                     * 这样的话,我们判断文件的后缀名 如果是图片格式的话,那么才可以
                     */
                    if (path.endsWith("jpg") || path.endsWith("png")) {
                        picPath = path;
                        Bitmap bitmap = BitmapFactory.decodeStream(cr
                                .openInputStream(uri));
                        imageView.setImageBitmap(bitmap);
                    } else {
                        alert();
                    }
                } else {
                    alert();
                }
 
            } catch (Exception e) {
            }
        }
 
        super.onActivityResult(requestCode, resultCode, data);
    }
 
    private void alert() {
        Dialog dialog = new AlertDialog.Builder(this).setTitle("提示")
                .setMessage("您选择的不是有效的图片")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        picPath = null;
                    }
                }).create();
        dialog.show();
    }
 
}
这个才是重点 UploadUtil:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
   
public class UploadUtil {
    private static final String TAG = "uploadFile";
    private static final int TIME_OUT = 10 * 1000; // 超时时间
    private static final String CHARSET = "utf-8"; // 设置编码
    /**
     * 上传文件到服务器
     * @param file 需要上传的文件
     * @param RequestURL 请求的rul
     * @return 返回响应的内容
     */
    public static int uploadFile(File file, String RequestURL) {
        int res=0;
        String result = null;
        String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
        String PREFIX = "--", LINE_END = "\r\n";
        String CONTENT_TYPE = "multipart/form-data"; // 内容类型
 
        try {
            URL url = new URL(RequestURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(TIME_OUT);
            conn.setConnectTimeout(TIME_OUT);
            conn.setDoInput(true); // 允许输入流
            conn.setDoOutput(true); // 允许输出流
            conn.setUseCaches(false); // 不允许使用缓存
            conn.setRequestMethod("POST"); // 请求方式
            conn.setRequestProperty("Charset", CHARSET); // 设置编码
            conn.setRequestProperty("connection", "keep-alive");
            conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="+ BOUNDARY);
 
            if (file != null) {
                /**
                 * 当文件不为空时执行上传
                 */
                DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
                StringBuffer sb = new StringBuffer();
                sb.append(PREFIX);
                sb.append(BOUNDARY);
                sb.append(LINE_END);
                /**
                 * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
                 * filename是文件的名字,包含后缀名
                 */
 
                sb.append("Content-Disposition: form-data; name=\"file\"; filename=\""
                        + file.getName() + "\"" + LINE_END);
                sb.append("Content-Type: application/octet-stream; charset="
                        + CHARSET + LINE_END);
                sb.append(LINE_END);
                dos.write(sb.toString().getBytes());
                InputStream is = new FileInputStream(file);
                byte[] bytes = new byte[1024];
                int len = 0;
                while ((len = is.read(bytes)) != -1) {
                    dos.write(bytes, 0, len);
                }
                is.close();
                dos.write(LINE_END.getBytes());
                byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END)
                        .getBytes();
                dos.write(end_data);
                dos.flush();
                /**
                 * 获取响应码 200=成功 当响应成功,获取响应的流
                 */
                 res = conn.getResponseCode();
                Log.e(TAG, "response code:" + res);
                if (res == 200) {
                    Log.e(TAG, "request success");
                    InputStream input = conn.getInputStream();
                    StringBuffer sb1 = new StringBuffer();
                    int ss;
                    while ((ss = input.read()) != -1) {
                        sb1.append((char) ss);
                    }
                    result = sb1.toString();
                    Log.e(TAG, "result : " + result);
                } else {
                    Log.e(TAG, "request error");
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }
}
⑩ Android 上传图片到服务器
http://192.168.1.212:8011/pd/upload/fileUpload.do;
这个是服务器地址,你图片要上传的地方。。
理论上是需要一个服务器接收你上传的图片的!
他这个demo中的url是本地的,目测是写demo的人自己写的用来测试的地址