Servlet本地测试与远程部署

来源:互联网 发布:c和c 程序员面试秘笈 编辑:程序博客网 时间:2024/06/06 20:16

本例子用的服务器是阿里云多语言环境镜像
upload.html代码

<form action="****.*" method="post" enctype="multipart/form-data">    <input type="file" name="mFile"/>    <input type="submit" value="提交"></form>

接着传输文件后servlet代码

private void savefile(HttpServletRequest request, HttpServletResponse response) throws IOException {        request.setCharacterEncoding("utf-8");        DiskFileItemFactory factory = new DiskFileItemFactory();// 获得磁盘文件条目工厂        // 获取服务器下的工程文件中image文件夹的路径        String path = request.getSession().getServletContext().getRealPath("/") + "upload";        response.getWriter().write(path);        /**         * 如果没以下两行设置的话,上传大的 文件 会占用 很多内存, 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 原理         * 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的         * 然后再将其真正写到 对应目录的硬盘上         */        factory.setRepository(new File(path));        // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室        factory.setSizeThreshold(1024 * 1024);        // 高水平的API文件上传处理        ServletFileUpload upload = new ServletFileUpload(factory);        try {            // 可以上传多个文件            List<FileItem> list = (List<FileItem>) upload.parseRequest(request);            for (FileItem item : list) {                // 获取表单的属性名字                String name = item.getFieldName();                // 如果获取的 表单信息是普通的 文本 信息                if (item.isFormField()) {                    // 获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的                    String value = item.getString();                    request.setAttribute(name, value);                }                // 对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些                else {                    /**                     * 以下三步,主要获取 上传文件的名字                     */                    // 获取路径名                    String value = item.getName();                    // 索引到最后一个反斜杠                    int start = value.lastIndexOf("/");                    // 截取上传文件的 字符串名字,加1是去掉反斜杠                    String filename = value.substring(start + 1);                    // 真正写到磁盘上                    File file = new File(path,filename);                    item.write(file);                 }            }        } catch (FileUploadException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }

android端的文件上传代码
选择了鸿神的Okhttp封装的代码(后期改为rxjava+retrofit(原生,先熟悉),当然,鸿神大大的也是杠杠的)

OkHttpUtils.post().addFile("img",“demo.jpg",new -File(uri)).url(url).build().execute();

addFile(key,filename,file)第一个参数是类似于上文html代码里
<input>里面的name属性,filename就是文件名,file就是文件。

But,问题来了
当我本地测试通过的时候(未使用app),部署到服务器时,服务器没有任何反应,没有报错,没有网页错误,查看存入文件的文件夹也没有上传的图片。
然后在代码里面添加了response.getWriter().writ()方法打印页面每一行代码放入了1.2.3.4顺序下来。
发现问题
每当服务器试图向数据盘中写入数据的时候顺序就断了
由此判断,服务器拒绝写入数据。
exm
那我是这么上传代码的?简直是interesting
查询镜像文档后发现改虚拟机(可以创建虚拟机,详情点击查看)
后来根据文档改了权限 设定

chown -R www.www ./*

一切over,看到我的1.2.3.4 出来后 整个人都激动了。
好了,整理完了。
emmmmmm
确实没了