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

QQ登录

只需一步,快速开始

查看: 2788|回复: 7

[结贴] 拍照上传

[复制链接]

1

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
发表于 2017-1-4 15:04:04 | 显示全部楼层 |阅读模式
调用手机拍照之后,传到服务端imageURI,用File file=new File(imageURI); FileUtils.copyFile(file, new File(imgFile));  报错:java.io.FileNotFoundException: Source 'file:\storage\emulated\0\Android\data\com.hcb\cache\1483511321924.jpg' does not exist。
根据imageURI在手机里也找不到图片。  请问在后台怎么操作上传的文件啊?
发表于 2017-1-4 16:20:12 | 显示全部楼层
应该是将文件上传到服务器,而不是将文件的路径传到服务器
corodva文件上传请参考:
http://bbs.wex5.com/forum.php?mod=viewthread&tid=68669   http://bbs.wex5.com/forum.php?mo ... 8&pid=165225779

拍照后获取文件url地址是:http://docs.wex5.com/wex5-app-question-list-2007/

你需要获取本地相片的url 使用corodva插件提供的API 上传到服务器!


简单的方法是:直接使用attachmentSimple组件就可以做到啊!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

1

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
 楼主| 发表于 2017-1-4 17:05:37 | 显示全部楼层
liangyongfei 发表于 2017-1-4 16:20
应该是将文件上传到服务器,而不是将文件的路径传到服务器
corodva文件上传请参考:
http://bbs.wex5.com/f ...

public static JSONObject uploadPicfile(JSONObject params, ActionContext context) throws SQLException, NamingException, IOException {
                        
                         System.out.println("uploadPicfile is running...");
                        
                        String ownerID = params.getString("ownerID");
                        String storeFileName = params.getString("storeFileName");                        
                        String picData = params.getString("picData");   


             String baasPath = Thread.currentThread().getContextClassLoader().getResource("").getPath()  ;
             String docStorePath = baasPath + ".." + File.separator + ".."+ File.separator + "model" +File.separator + "UI2" +File.separator + "myClassmate" +File.separator+"uploadfiles" ;
             File docstoreDir = new File(docStorePath);
                   if(!(docstoreDir.exists() && docstoreDir.isDirectory())){
                          docstoreDir.mkdirs();
                   }                           

            String storePath = docStorePath + File.separator + ownerID;
                 File storeDir = new File(storePath);
                 if(!(storeDir.exists() && storeDir.isDirectory())){
                         storeDir.mkdirs();
                 }      
                 
                System.out.println("后台计算的baasPath的值:"+ baasPath);
           System.out.println("后台计算的docStorePath的值:"+ docStorePath);  
           System.out.println("后台计算的storeDir的值:"+ storeDir);

             BASE64Decoder decoder = new BASE64Decoder();
             try {                  
                     byte[] decodedBytes = decoder.decodeBuffer(picData);

                     String imgFile = storePath + File.separator + storeFileName;
                     FileOutputStream out = new FileOutputStream(imgFile);
                     out.write(decodedBytes);
                     out.close();
                     System.out.println("图片上传成功!");
             } catch (Exception e) {
                     System.out.println("图片上传失败!");
                     e.printStackTrace();
             }
             return null;
     }



这应该是图片上传到服务器的功能吧?  这里面的picData应该是图片的路径,如果我直接用File file = new File(picData),也是获取不到的,用byte[] decodedBytes = decoder.decodeBuffer(picData); 却能够传到服务器,但是在服务器上打不开,说是损坏或过大。
回复 支持 反对

使用道具 举报

发表于 2017-1-4 17:42:24 | 显示全部楼层
H.S 发表于 2017-1-4 17:05
public static JSONObject uploadPicfile(JSONObject params, ActionContext context) throws SQLExcepti ...

你是写baasServer实现的对吧!
可以参考:/Baas/justep/SimpleFileStore.java

前端是怎么写的,图片是否经过压缩呢?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

1

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
 楼主| 发表于 2017-1-5 13:02:29 | 显示全部楼层
liangyongfei 发表于 2017-1-4 17:42
你是写baasServer实现的对吧!
可以参考:/Baas/justep/SimpleFileStore.java

对的,我用了baasServer 写的,也看了SimpleFileStore.java ,但是从request里面获取不到参数,还是要从params.getString(key)才能获取到,这是为什么呢,前端js:
//拍照
        Model.prototype.cameraBtnClick = function(event) {
                var operateLabel = this.getElementByXid("operateLabel");
                var resultLabel = this.getElementByXid("resultLabel");
                $(operateLabel).text("开始拍照!");
                $(resultLabel).text("");

                var data = this.comp("fileData");
                function onSuccess(imageURI) {
                data.newData({index : 0});
                        data.setValue("filePath", imageURI);
                        data.setValue("fileName", imageURI.substr(imageURI.lastIndexOf('/') + 1));
                        data.setValue('createTime', justep.Date.toString(new Date(), justep.Date.DEFAULT_FORMAT ));
                        $(resultLabel).text("成功1"+imageURI);
                        //debugger
                        justep.Baas.sendRequest({
                                "url" : "/test/serach_action",
                                "action" : "uploadfile",
                                "async" : false,
                                "params" : {
                                        "imagepath":imageURI,
                                        "storeFileName":imageURI.substr(imageURI.lastIndexOf('/') + 1),
                                        "ownerID":111
                                },
                                "success" : function(data) {
                                        alert("11")
                                }
                        });
                }
                function onFail(message) {
                        $(resultLabel).text("失败:"+message);
                }
                navigator.camera.getPicture(onSuccess, onFail, {quality : 100});
        };
没有压缩过。
回复 支持 反对

使用道具 举报

发表于 2017-1-5 13:57:00 | 显示全部楼层
H.S 发表于 2017-1-5 13:02
对的,我用了baasServer 写的,也看了SimpleFileStore.java ,但是从request里面获取不到参数,还是要从p ...

你传参的参数只不过是一个字符串,而不是真正的文件
最终,文件上传应该是通过调用corodva插件提供的API 方法,请参考案例,

而不是调用的sendRequest 方法,
sendRequest 方法并不能上传文件
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

1

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
 楼主| 发表于 2017-1-5 16:05:10 | 显示全部楼层
liangyongfei 发表于 2017-1-5 13:57
你传参的参数只不过是一个字符串,而不是真正的文件
最终,文件上传应该是通过调用corodva插件提供的API  ...

刚开始搞这个,看了corodva插件提供的API 才知道 ,在getPicture  里面加一个参数destinationType: Camera.DestinationType.DATA_URL  就行了,谢谢了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
 楼主| 发表于 2017-1-5 17:00:03 | 显示全部楼层
本帖最后由 H.S 于 2017-1-5 17:08 编辑
liangyongfei 发表于 2017-1-5 13:57
你传参的参数只不过是一个字符串,而不是真正的文件
最终,文件上传应该是通过调用corodva插件提供的API  ...

wex5  如何用filetransfer 传输文件?能不能用filetransfer  传到baasServer ? 还是说传到自己的服务器。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 02:36 , Processed in 0.055580 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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