Android上传图片到服务器的代码怎么写(Android客户端代码和服务端代码)

来源:互联网 发布:java局部变量重复 编辑:程序博客网 时间:2024/04/30 22:41

第一点:Android端代码先引入权限

//网络权限<uses-permission android:name="android.permission.INTERNET"></uses-permission>//相册权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

第二点:Android端在build.gradle里面引入依赖注入

//ok_go的依赖//必须使用compile 'com.lzy.net:okgo:3.0.4'

第三点:建立一个将uri转成url的类

public class Utils {    /**     * 这个是将跳转到相册返回的uri转换成写文件或者读成文件的url的,就是new Fileurl)时候,不能使用uri     *     * @param context 上下文对象     * @param uri     当我们跳转到相册时候给我们返回来的地址,例如 content://media/external/images/media/124238     * @return data 返回一个字符串,这个字符串就是真实的地址     */    public static String getRealFilePath(final Context context, final Uri uri) {        if (null == uri) return null;        final String scheme = uri.getScheme();        String data = null;        if (scheme == null)            data = uri.getPath();        else if (ContentResolver.SCHEME_FILE.equals(scheme)) {            data = uri.getPath();        } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {            Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);            if (null != cursor) {                if (cursor.moveToFirst()) {                    int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);                    if (index > -1) {                        data = cursor.getString(index);                    }                }                cursor.close();            }        }        return data;    }}

第四点:随便你定义一个按钮button进行提交图片使用匿名内部类的方式进行上传图片的方法

//真正的提交addProjectLL.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {            OkGo.<String>post(BASE_HOSE + "/pic/upload")//                    .tag(this)//                    .isMultipart(true)                    .params("uploadFile", new File(realFilePath))                    .execute(new StringCallback() {                        @Override                        public void onSuccess(Response<String> response) {                            Toast.makeText(getActivity(), response.body().toString(), Toast.LENGTH_SHORT).show();                        }                    });        }    });

第五点:服务端的代码首先要有多媒体解析,所以要在Spring的配置文件中配置多媒体解析器


<!-- 配置多媒体解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>


第六点:服务器端Web层的代码编写

@Controller
public class PicturController {
@Value("${IMAGE_SERVER_URL}")
private String IMAGE_SERVER_URL;


@Autowired
private HttpServletRequest request;


@RequestMapping("/pic/upload")
@ResponseBody
public Map uploadFile(MultipartFile uploadFile) {


// 把图片上传到图片服务器,
try {
FastDFSClient fastDFSClient = new FastDFSClient(
"classpath:conf/client.conf");


String originalFilename = uploadFile.getOriginalFilename();
String extName = originalFilename.substring(originalFilename
.lastIndexOf(".") + 1);


// 取文件扩展名
String url = fastDFSClient.uploadFile(uploadFile.getBytes(),
extName);


url = IMAGE_SERVER_URL + url;
System.out.println(url);


Map result = new HashMap<>();
result.put("error", 0);
result.put("url", url);
return result;


} catch (Exception e) {
e.printStackTrace();
Map result = new HashMap<>();
result.put("error", 1);
result.put("message", "图片上传失败");
return result;
}
}
}

Android端代码地址https://github.com/lovepaul/e3mall_m.git
















阅读全文
0 0
原创粉丝点击