起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1640|回复: 7

[处理中3] attachmentSimple发布

[复制链接]

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
QQ
发表于 2017-5-8 10:48:58 | 显示全部楼层 |阅读模式
attachmentSimple在页面上测试是可以获取到文件真实的名字,但是在真机缺是获取到乱码,例如image%3A26872这种
发表于 2017-5-8 11:44:24 | 显示全部楼层
请问你是怎么获取的??app乱码问题,需要注意的就是加密  和 非加密的情况别冲突!!
如果你想在attachmentSimple 上传图片后显示文件名字,可以参考
http://docs.wex5.com/wex5-ui-question-list-2151

或者截图,把你的情况再说明白一些!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
QQ
 楼主| 发表于 2017-5-8 12:59:38 | 显示全部楼层
liangyongfei 发表于 2017-5-8 11:44
请问你是怎么获取的??app乱码问题,需要注意的就是加密  和 非加密的情况别冲突!!
如果你想在attachmen ...

主要是我上传的时候我提交代码是
var cuisineData = this.comp('cuisineDetailData');
                var row = cuisineData.getCurrentRow();
                var jsonList1 = eval("(" +row.val('fImage')+")");
                var ownerID = row.getID();
                var str="$UI2/tsj/data/attachmentSimple";
                var realFileName = jsonList1[0]["realFileName"];
                var fImage = str+"/"+ownerID+"/"+realFileName;
                alert(fImage);
                cuisineData.setValue("fImage",fImage,row);
                alert(fImage);
                this.comp('windowReceiver').windowEnsure(row);
是弹出他的路径和图片名称的,但是获取到就这个image%3A26872
楼下附上java代码
package teacher;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

import com.alibaba.fastjson.JSONObject;
import com.justep.baas.action.ActionContext;

public class SimpleFileStore {

        public static JSONObject service(JSONObject params, ActionContext context) throws ServletException, IOException {

                HttpServletRequest request = (HttpServletRequest) context.get(ActionContext.REQUEST);
                HttpServletResponse response = (HttpServletResponse) context.get(ActionContext.RESPONSE);
                if (request.getMethod().equals("GET")) {
                        doGet(request, response);
                } else if (request.getMethod().equals("POST")) {
                        doPost(request, response);
                }
                return null;
        }

        static String docStorePath;
        static File docStoreDir;

        static {
//                System.out.println();
                String baasPath = Thread.currentThread().getContextClassLoader().getResource("").getPath() + ".." + File.separator + "..";
                docStorePath = baasPath + File.separator + "model" + File.separator + "UI2" + File.separator + "tsj" + File.separator + "data" + File.separator + "attachmentSimple";
                File file = new File(docStorePath);
                if (!(file.exists() && file.isDirectory())) {
                        file.mkdirs();
                }
                docStoreDir = file;
        }

        /**
         * get为获取文件 浏览或者下载
         **/
        private static void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                System.out.println(45611);
                String realFileName = request.getParameter("realFileName");
                System.out.println(realFileName+"111111111");
                String operateType = request.getParameter("operateType");
                if ("copy".equals(operateType)) {
                        copyFile(request, response);
                } else {
                        getFile(request, response);
                }
        }

        private static void copyFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
                System.out.println(123123132);
                String ownerID = request.getParameter("ownerID");
                String targetOwnerID = request.getParameter("targetOwnerID");
                String storeFileName = request.getParameter("storeFileName");
                System.out.println(storeFileName+":2222");
                File file = new File(docStorePath + File.separator + ownerID + File.separator + storeFileName);
//                System.out.println("file"+file);
                File targetFile = new File(docStorePath + File.separator + targetOwnerID + File.separator + storeFileName);
                FileUtils.copyFile(file, targetFile);
        }

        private static final int BUFFER_SIZE = 32768 * 8;

        private static void getFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
                System.out.println(13333);
                String ownerID = request.getParameter("ownerID");
                String realFileName = URLEncoder.encode(request.getParameter("realFileName"), "utf-8");
                String storeFileName = request.getParameter("storeFileName");
                String operateType = request.getParameter("operateType");
                /* String fileSize = request.getParameter("fileSize"); */

                File file = new File(docStorePath + File.separator + ownerID + File.separator + storeFileName);
                FileInputStream fis = new FileInputStream(file);

                /* response.setContentType(mimeType); */
                /* response.setHeader("Content-Length", String.valueOf(part.getSize())); */
                response.setHeader("Cache-Control", "pre-check=0, post-check=0, max-age=0");

                String fileNameKey = "filename";
                /*
                 * UserAgent ua = com.justep.ui.util.NetUtils.getUserAgent(request);
                 * if(Browser.FIREFOX.equals(ua.getBrowser().getGroup())){ fileNameKey =
                 * "filename*"; }
                 */
                if ("download".equals(operateType)) {
                        response.addHeader("Content-Disposition", "attachment; " + fileNameKey + "=\"" + realFileName + "\"");
                } else {
                        response.addHeader("Content-Disposition", "inline; " + fileNameKey + "=\"" + realFileName + "\"");
                }

                OutputStream os = response.getOutputStream();
                byte[] buffer = new byte[BUFFER_SIZE];
                try {
                        int read;
                        while ((read = fis.read(buffer)) != -1) {
                                os.write(buffer, 0, read);
                        }
                } finally {
                        fis.close();
                }
        }

        /**
         * post为上传
         **/
        protected static void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                System.out.println("111111111+++");
                String contentType = request.getContentType();
                try {
                        if ("application/octet-stream".equals(contentType)) {
                                storeOctStreamFile(request, response);
                        } else if (contentType != null && contentType.startsWith("multipart/")) {
                                storeFile(request, response);
                        } else {
                                throw new RuntimeException("not supported contentType");
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                        throw new IOException("storeFile异常");
                }
                response.getWriter().write("");
        }

        private static void storeOctStreamFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
                System.out.println(2);
                InputStream in = null;
                FileOutputStream storeStream = null;
                try {
                        String ownerID = request.getParameter("ownerID");
                        String storeFileName = request.getParameter("storeFileName");
//                        System.out.println("storeFileName"+storeFileName);
                        in = request.getInputStream();
                        String storePath = docStorePath + File.separator + ownerID;
                        getOrCreateFile(storePath);
                        File toStoreFile = new File(storePath + File.separator + storeFileName);
                        storeStream = new FileOutputStream(toStoreFile);
                        IOUtils.copy(in, storeStream);
                } finally {
                        IOUtils.closeQuietly(in);
                        IOUtils.closeQuietly(storeStream);
                }
        }

        private static File getOrCreateFile(String path) {
                System.out.println(3);
                File storeDir = new File(path);
//                System.out.println(storeDir);
                if (!(storeDir.exists() && storeDir.isDirectory())) {
                        storeDir.mkdirs();
                }
                return storeDir;
        }

        public static List<FileItem> parseMultipartRequest(HttpServletRequest request) throws FileUploadException {
                System.out.println(4);
                DiskFileItemFactory factory = new DiskFileItemFactory();
//System.out.println(222);
                ServletContext servletContext = request.getSession().getServletContext();
                File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
                factory.setRepository(repository);

                // Create a new file upload handler
                ServletFileUpload upload = new ServletFileUpload(factory);

                // Parse the request
                @SuppressWarnings("unchecked")
                List<FileItem> items = upload.parseRequest(request);
                for (FileItem fileItem : items) {
                        System.out.println(fileItem);
                }
                return items;
        }

        private static void storeFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
                System.out.println(5);
                HashMap<String, String> params = new HashMap<String, String>();
                System.out.println(params);
                List<FileItem> items = parseMultipartRequest(request);
//                System.out.println(items);
                Iterator<FileItem> iter = items.iterator();
                FileItem fileItem = null;
                String ownnname ="";
                while (iter.hasNext()) {
                        FileItem item = iter.next();
//                        System.out.println(item);
//                        System.out.println(item.isFormField());
                        if (item.isFormField()) {
                                String name = item.getFieldName();
                                String value = item.getString();
//                                System.out.println(name+"++++"+value);
                                params.put(name, value);
                        } else {
                                /*
                                 * String fieldName = item.getFieldName(); String fileName =
                                 * item.getName(); String contentType = item.getContentType();
                                 * boolean isInMemory = item.isInMemory(); long sizeInBytes =
                                 * item.getSize();
                                 */
//                                System.out.println(item);
                                ownnname=item.getName();
                                System.out.println(ownnname);
                                fileItem = item;
                        }
                }
                if (fileItem != null) {
                        int i=1;
                        String storePath = docStorePath + File.separator + params.get("ownerID");
//                        System.out.println(storePath);
                        File storeDir = new File(storePath);
                        if (!(storeDir.exists() && storeDir.isDirectory())) {
                                storeDir.mkdirs();
                        }
                        File toStoreFile = new File(storePath + File.separator + ownnname);
                        System.out.println(storePath+":storePath");       
                        System.out.println(params.get("storeFileName")+"2222");
//                        System.out.println(toStoreFile);
                        System.out.println("toStoreFile:+++++"+toStoreFile);
                       
                        fileItem.write(toStoreFile);
                        i++;
                        System.out.println(i);
                }

        }

}
回复 支持 反对

使用道具 举报

发表于 2017-5-8 13:49:29 | 显示全部楼层
724875390@qq.co 发表于 2017-5-8 12:59
主要是我上传的时候我提交代码是
var cuisineData = this.comp('cuisineDetailData');
                var row = cuisi ...

java代码是自己实现的吗??
参考/Baas/justep/SimpleFileStore.java 写的吗??

默认情况获取 上传 图片URL代码!可以参考
http://docs.wex5.com/wex5-ui-question-list-2093
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
QQ
 楼主| 发表于 2017-5-8 14:35:15 | 显示全部楼层
liangyongfei 发表于 2017-5-8 13:49
java代码是自己实现的吗??
参考/Baas/justep/SimpleFileStore.java 写的吗??

参考改的,也就改了private static void storeFile(HttpServletRequest request,
                        HttpServletResponse response) throws Exception {
                HashMap<String,String> params = new HashMap<String,String>();
                List<FileItem> items =  parseMultipartRequest(request);
                Iterator<FileItem> iter = items.iterator();
                FileItem fileItem = null;
                while (iter.hasNext()) {
                    FileItem item = iter.next();
                    if (item.isFormField()) {
                            String name = item.getFieldName();
                    String value = item.getString();
                        params.put(name, value);
                    } else {
                            /*String fieldName = item.getFieldName();
                        String fileName = item.getName();
                        String contentType = item.getContentType();
                        boolean isInMemory = item.isInMemory();
                        long sizeInBytes = item.getSize();*/
                            fileItem = item;
                    }
                }
                if(fileItem != null){
                        String storePath = docStorePath + File.separator + params.get("ownerID");
                File storeDir = new File(storePath);
                if(!(storeDir.exists() && storeDir.isDirectory())){
                        storeDir.mkdirs();
                }
                File toStoreFile = new File(storePath + File.separator + params.get("storeFileName"));
                fileItem.write(toStoreFile);
                }
                               
        }
这个方法最后保存的是真实的名字加后缀,关键是我用手机端的话,代码到这就不行了,网页端可以
回复 支持 反对

使用道具 举报

发表于 2017-5-8 15:32:15 | 显示全部楼层
724875390@qq.co 发表于 2017-5-8 14:35
参考改的,也就改了private static void storeFile(HttpServletRequest request,
                        HttpServletResponse  ...

String ownerID = URLEncoder.encode(request.getParameter("ownerID"), "utf-8");

修改java代码 字符串编码处理一下试试吧!

本来id列就不应该是汉字的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

1

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
QQ
 楼主| 发表于 2017-5-8 22:14:54 | 显示全部楼层
liangyongfei 发表于 2017-5-8 15:32
String ownerID = URLEncoder.encode(request.getParameter("ownerID"), "utf-8");

修改java代码 字符 ...

改了还是一样
回复 支持 反对

使用道具 举报

发表于 2017-5-9 10:07:17 | 显示全部楼层

你把所有获取ownerID 的地方都转码一次试试吧
比如 storeFile  方法中

调用 mkdirs 方法的地方尤其注意!这个就是创建文件夹的方法!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-6-22 18:56 , Processed in 0.062037 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表