SpringMVC上传文件例子

服务器:

Apache Tomcat/8.0.33

开发环境:Eclipse Java EE IDE for Web Developers.
Version: Mars.2 Release (4.5.2)
Build id: 20160218-0600

Java version "1.8.0_65"

SpringMVC:4.2.6

新建一个Dynamic Web Project

新建web.xml

[html]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7. <!-- 配置Servlet name 和class-->  
  8. <servlet>  
  9.    <servlet-name>springmvc</servlet-name>  
  10.    <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  11.    <load-on-startup>1</load-on-startup>  
  12. </servlet>  
  13. <!-- 配置servlet mapping -->  
  14. <servlet-mapping>  
  15.   <servlet-name>springmvc</servlet-name>  
  16.   <url-pattern>*.html</url-pattern>  
  17. </servlet-mapping>  
  18. <!-- 配置filter name和class  -->  
  19. <filter>  
  20.    <filter-name>CharacterEncodingFilter</filter-name>  
  21.    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  22.    <init-param>  
  23.      <param-name>encoding</param-name>  
  24.      <param-value>utf-8</param-value>  
  25.    </init-param>  
  26. </filter>  
  27. <!-- 配置filter mapping -->  
  28. <filter-mapping>  
  29.   <filter-name>CharacterEncodingFilter</filter-name>  
  30.   <url-pattern>*.html</url-pattern>  
  31. </filter-mapping>  
  32. </web-app>  
新建springmvc-servlet.xml
[html]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:p="http://www.springframework.org/schema/p"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="  
  7.         http://www.springframework.org/schema/beans  
  8.         http://www.springframework.org/schema/beans/spring-beans.xsd  
  9.         http://www.springframework.org/schema/context  
  10.         http://www.springframework.org/schema/context/spring-context.xsd">  
  11. <!-- jsp 渲染器 -->  
  12. <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  13.     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
  14.     <property name="prefix" value="/WEB-INF/jsp/"/>  
  15.     <property name="suffix" value=".jsp"/>  
  16. </bean>  
  17. <!-- 对上传的支持  
  18.    需要commons-fileupload.jar和commons-io.jar的支持  
  19.    设置(multipart渲染器)  multipart就是file upload  
  20. -->  
  21. <bean id="multipartResolver"  
  22.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  23.   
  24.     <!-- one of the properties available; the maximum file size in bytes  -->  
  25.     <!-- 10mb -->  
  26.     <property name="maxUploadSize" value="1000000"/>  
  27.   
  28. </bean>  
  29. <!-- 注解扫描 -->  
  30.     <context:component-scan base-package="cn.han.controller"/>  
  31.   
  32.     <!-- ... -->  
  33.   
  34. </beans>  
新建cn.han.controller包

新建HelloWorldController.Java

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. package cn.han.controller;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.text.Normalizer.Form;  
  9.   
  10. import javax.servlet.http.HttpServletRequest;  
  11.   
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.web.bind.annotation.RequestMapping;  
  14. import org.springframework.web.bind.annotation.RequestMethod;  
  15. import org.springframework.web.bind.annotation.RequestParam;  
  16. import org.springframework.web.multipart.MultipartFile;  
  17. import org.springframework.web.multipart.commons.CommonsMultipartFile;  
  18. import org.springframework.web.servlet.ModelAndView;  
  19.   
  20. @Controller  
  21. public class HelloWorldController {  
  22.     //|表单页面  
  23.     @RequestMapping("/form")  
  24.     public ModelAndView form()  
  25.     {  
  26.         ModelAndView mView=new ModelAndView();  
  27.         mView.setViewName("form");  
  28.         return mView;  
  29.     }  
  30.     //|上传处理页面  
  31.     @RequestMapping(path="/upload",method = RequestMethod.POST)  
  32.     public ModelAndView upload(@RequestParam("file")CommonsMultipartFile upfile,HttpServletRequest req) throws IOException{  
  33.         //|获取在Web服务器上的 绝对路径  
  34.         String path =req.getRealPath("/fileupload");  
  35.         System.out.println(path);  
  36.         //|获取输入流  
  37.         InputStream is=upfile.getInputStream();  
  38.         //|文件输出流  
  39.         OutputStream os =new FileOutputStream(new File(path,upfile.getOriginalFilename()));  
  40.         //|循环写入  
  41.         int length=0;  
  42.         byte [] buffer=new byte[128];  
  43.         while((length=is.read(buffer))!=-1)  
  44.         {  
  45.             os.write(buffer,0, length);  
  46.         }  
  47.         is.close();  
  48.         os.close();  
  49.         //===渲染===  
  50.         ModelAndView mView=new ModelAndView();  
  51.         mView.setViewName("upload");  
  52.         //|返回至渲染器  
  53.         return mView;  
  54.     }  
  55. }  
新建form.jsp
[html]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>上传文件</title>  
  8. </head>  
  9. <body>  
  10.   <form action="upload.html" method="POST" enctype="multipart/form-data">  
  11.     <input type="file" name="file"/>  
  12.     <input type="submit" value="上传" />  
  13.   </form>  
  14. </body>  
  15. </html>  
upload.jsp
[html]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>上传结果</title>  
  8. </head>  
  9. <body>  
  10.   恭喜~上传成功~  
  11. </body>  
  12. </html>  
还需要导入jar包,包括Springmvc的所有包

commons-io.jar,commons-fileupload.jar

commons-logging-1.2.jar

jastl-1.1.2.jar,standard-1.1.2.jar

下面是我遇到的报错以及解决办法

[plain]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. HTTP Status 500 - Failed to convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found  
  2.   
  3.   
  4. type Exception report  
  5.   
  6. message Failed to convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found  
  7.   
  8. description The server encountered an internal error that prevented it from fulfilling this request.  
  9.   
  10. exception  
  11. org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found  
  12.     org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:74)  
  13.     org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)  
  14.     org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:688)  
  15.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:520)  
  16.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:353)  
  17.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:173)  
  18.     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)  
  19.     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)  
  20.     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)  
  21.     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)  
  22.     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)  
  23.     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)  
  24.     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)  
  25.     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)  
  26.     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)  
  27.     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  
  28.     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)  
  29.     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  
  30.   
  31.   
  32. root cause  
  33. java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found  
  34.     org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:302)  
  35.     org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:108)  
  36.     org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)  
  37.     org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)  
  38.     org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:688)  
  39.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:520)  
  40.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:353)  
  41.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:173)  
  42.     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)  
  43.     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)  
  44.     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)  
  45.     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)  
  46.     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)  
  47.     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)  
  48.     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)  
  49.     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)  
  50.     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)  
  51.     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  
  52.     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)  
  53.     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  
  54.   
  55.   
  56. note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.  

上面报错说的是 无法从String转化成CommonsMultipartFile ,其实就是 我的form表单有问题,把文件名发过去了 而没有真正传送二进制文件,需要设置
[html]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. enctype="multipart/form-data"  
下面是第二个报错:
[plain]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. HTTP Status 500 - Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)  
  2.   
  3.   
  4. type Exception report  
  5.   
  6. message Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)  
  7.   
  8. description The server encountered an internal error that prevented it from fulfilling this request.  
  9.   
  10. exception  
  11. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)  
  12.     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979)  
  13.     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)  
  14.     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)  
  15.     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)  
  16.     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)  
  17.     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  
  18.     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)  
  19.     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  
  20.   
  21.   
  22. root cause  
  23. org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)  
  24.     org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:162)  
  25.     org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)  
  26.     org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1091)  
  27.     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:930)  
  28.     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)  
  29.     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)  
  30.     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)  
  31.     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)  
  32.     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)  
  33.     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)  
  34.     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  
  35.     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)  
  36.     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  
  37.   
  38.   
  39. root cause  
  40. org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)  
  41.     org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)  
  42.     org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)  
  43.     org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)  
  44.     org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)  
  45.     org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158)  
  46.     org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)  
  47.     org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1091)  
  48.     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:930)  
  49.     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)  
  50.     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)  
  51.     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)  
  52.     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)  
  53.     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)  
  54.     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)  
  55.     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  
  56.     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)  
  57.     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  
  58.   
  59.   
  60. note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.  
这里一看就知道是配置CommonsMultipart渲染器的上传文件大小限制的原因
[html]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. <property name="maxUploadSize" value="1000000"/>  

下面还有一组报错
[plain]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. HTTP Status 500 - D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test\fileupload\psbe.jpg (系统找不到指定的路径。)  
  2.   
  3.   
  4. type Exception report  
  5.   
  6. message D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test\fileupload\psbe.jpg (系统找不到指定的路径。)  
  7.   
  8. description The server encountered an internal error that prevented it from fulfilling this request.  
  9.   
  10. exception  
  11. java.io.FileNotFoundException: D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test\fileupload\psbe.jpg (系统找不到指定的路径。)  
  12.     java.io.FileOutputStream.open0(Native Method)  
  13.     java.io.FileOutputStream.open(FileOutputStream.java:270)  
  14.     java.io.FileOutputStream.<init>(FileOutputStream.java:213)  
  15.     java.io.FileOutputStream.<init>(FileOutputStream.java:162)  
  16.     cn.han.controller.HelloWorldController.upload(HelloWorldController.java:38)  
  17.     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  18.     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  19.     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  20.     java.lang.reflect.Method.invoke(Method.java:497)  
  21.     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:178)  
  22.     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)  
  23.     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)  
  24.     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)  
  25.     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)  
  26.     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)  
  27.     org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)  
  28.     javax.servlet.http.HttpServlet.service(HttpServlet.java:648)  
  29.     org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)  
  30.     javax.servlet.http.HttpServlet.service(HttpServlet.java:729)  
  31.     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  
  32.     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)  
  33.     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  
  34.   
  35.   
  36. note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.  
  37.   
  38.   
  39. Apache Tomcat/8.0.33  
这个意思就是文件夹不存在 ,确实不存在,需要在D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test目录下创建fileupload文件夹,因为eclipse默认部署的地方就是在D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\下面,然而我们指定了目录 ,却没有那个目录就报错了。

项目运行截图








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值