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

QQ登录

只需一步,快速开始

查看: 3145|回复: 8

[处理中6] 获取物理路径

[复制链接]

67

主题

211

帖子

532

积分

高级会员

Rank: 4

积分
532
QQ
发表于 2015-6-12 14:31:17 | 显示全部楼层 |阅读模式
急。急。急。谢谢大神们。。。
其实我想做一个 上传本地TXT文件,然后将TXT里的数据 读取到数据库中,前几天我问过这个问题,但是现在我没有采用JAVA读取流的操作,我是用的mysql自带的load  加载的,把TXT文件里的数据加载到数据库中,但是用这个实现的话,就必须知道这个TXT的物理路径。
我通过通过这个组件attchmenEditor2,上传自己的TXT文件,然后保存到数据库里,看里面存放的  

"[{"docID":"C6A4900087400001C49F55801861C3E0","docName":"重复签到.txt","size":"6159","docPath":"/defaultDocNameSpace","fileID":""}]"
然后我用 var json = justep.xbl("detailData").getValue('tfZhiSFJ');
                if (json != "") {
                        var jsonList = eval("(" + json + ")");
                        // 获得docName
                        var docName =jsonList[0]["docName"];
                        // 获得size
                        var size =jsonList[0]["size"];
                        // 获得docPath
                        var rootPath =jsonList[0]["docPath"];
                        // 获得fileID
                        var fileID =jsonList[0]["fileID"];
                        // 获得文档url
                        var url =justep.Doc.getURLByFileID(rootPath, fileID);
                        ;
}
方法得到的是下载路径,如下:
"/tianxin/UI/system/service/doc/common/uploadDoc.j?dochost=http://localhost:8010/DocServer/repository/file/download//last/content?key=f933c7f22e58992ce220df61190a807ed0ddef4049cfe01ee53c7e0f8b5b494f866eec09a41ab9342499c1c3713c41b7043b0f7083fee4882689133bf7dbef0f27838561f27a2244f41fed306b4fbf3d06a49d9e258bfbb2&bsessionid=74F95B437A19CE455625E551A272C501"


这个路径不是TXT所在本地的绝对路径。我把这个路径放到load加载的时候老报错,表示这个路径 有问题,
请问这个问题怎么解决???


通过这个我没有得到绝对路径,就开始采用  HTML下的   input(html)组件,这个组件在界面上能显示上传的绝对路径,可是随着浏览器的安全性提高,用这个得到路径也很难。这个怎么得到?
在说了,这个要上传到服务器的,怎么通过这个input(html)组件把本地文件上传到服务器上,又怎么得到其上传上去的路径,也就是Load这个函数能认识的路径。
谢谢

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35918
发表于 2015-6-12 17:05:00 | 显示全部楼层
附件组件上的不能获取到物理路径,可以取到就是Url
可以参考http://bbs.wex5.com/forum.php?mod=viewthread&tid=38913这个直接上传到一个物理路径了
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

67

主题

211

帖子

532

积分

高级会员

Rank: 4

积分
532
QQ
 楼主| 发表于 2015-6-14 20:28:09 | 显示全部楼层
jishuang 发表于 2015-6-12 17:05
附件组件上的不能获取到物理路径,可以取到就是Url
可以参考http://bbs.wex5.com/forum.php?mod=viewthr ...

很是感谢,谢谢您,可是  我怎么才能得到这个路径啊,我看返回的信息也没有路径啊?这个怎么得到,还需要什么操作嘛?麻烦您再指引指引。受累了。。。
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2015-6-15 09:18:46 | 显示全部楼层
xiaozhi 发表于 2015-6-14 20:28
很是感谢,谢谢您,可是  我怎么才能得到这个路径啊,我看返回的信息也没有路径啊?这个怎么得到,还需要 ...

System.getProperty("java.io.tmpdir");
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

67

主题

211

帖子

532

积分

高级会员

Rank: 4

积分
532
QQ
 楼主| 发表于 2015-6-15 15:38:42 | 显示全部楼层
wgs7909 发表于 2015-6-15 09:18
System.getProperty("java.io.tmpdir");

您好,我按照上面做的,里面有个方法有这个  作为 return ,我在哪接受这个return的值啊???我是个小菜菜。麻烦您了。。
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2015-6-15 16:03:28 | 显示全部楼层
xiaozhi 发表于 2015-6-15 15:38
您好,我按照上面做的,里面有个方法有这个  作为 return ,我在哪接受这个return的值啊???我是个小菜 ...

你要在哪里用啊?把代码发一下吧!
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

67

主题

211

帖子

532

积分

高级会员

Rank: 4

积分
532
QQ
 楼主| 发表于 2015-6-18 12:07:32 | 显示全部楼层
wgs7909 发表于 2015-6-15 16:03
你要在哪里用啊?把代码发一下吧!

您好,我是按照那个帖子做的首先在界面上,我添加了一个div,然后在div源码中间  插入  了  
        <xhtml:div id="div1" style="position:absolute;top:197px;left:349px;" class="xui-container">

                 <xhtml:form enctype="multipart/form-data" name="f" id="div-form" action="/UI/system/components/excel/import/upload.j"
            method="post" target="div-iframe" style="margin:0;">
            <xhtml:input name="process" type="hidden" value="/ShiGuai/QianDGL/process/KaoQJDRSJ/kaoQJDRSJProcess"/>  
            <xhtml:input name="activity" type="hidden" value="mainActivity"/>  
            <xhtml:input name="action" type="hidden" value="UploadFileAction"/>  
            <xhtml:input name="uploadFile" type="file" style="margin-top:4;width:100%;height:20px;vertical-align:middle;line-height:18px;"/>  
            <xhtml:input name="str" value="123"/>
          </xhtml:form>  
          <xhtml:iframe id="div-iframe" name="div-iframe" style="display:"></xhtml:iframe>
              
        </xhtml:div>



在  对应的  Action中  写的代码
  /**
     * 上传
     * @param uploadFile
     * @param str
     * @return
     */
        public static String UploadFile(InputStream  uploadFile,String str){
                       System.out.println("字符串参数为:" + str);
           String name = java.util.UUID.randomUUID().toString();
           File file = new File(getTempDir() + "/" + name + ".tmp");
           if (file.exists())
                   file.delete();
           FileOutputStream output;
           try {
                   output = new FileOutputStream(file);
                   try {
                           byte[] bs = new byte[1024*4];
                           int i = -1;
                           while ((i = uploadFile.read(bs)) != -1) {
                                   output.write(bs, 0, i);
                           }
//                           output.flush();
                           System.out.println("文件名:" + file.getName());
                   } finally {
                           output.close();
                   }
           } catch (Exception e) {
                   throw new RuntimeException("上传失败!", e);
           }
           return "abc";


        }
       
       
         private static String getTempDir() {
         return System.getProperty("java.io.tmpdir");
         }



其中“uploadFile”  的类型 是Object的。

在按钮的单击事件中写
var s = justep.Request.convertURL("/UI/system/components/excel/import/upload.j");
    var f = document.getElementById('div-form');
    //在SP2版本后,form的action属性需要在js中赋值
    if(!justep.Browser.IE6 && !justep.Browser.IE7)
        f.setAttribute('action', s);
    else
        f.attributes['action'].value = s;
    f.submit();  







然后   又  定了一个函数
//上传
        mainActivity.afterUploadFile = function(iframe){
        if (iframe && iframe.contentWindow && iframe.contentWindow.document) {
                var doc = (!justep.Browser.IE||justep.Browser.IE9)?iframe.contentWindow.document:iframe.contentWindow.document.XMLDocument;
                if(doc){
                        var data = justep.Request.getData(doc);
                        var flag = justep.Request.getFlag(doc);
                }
                if (data && flag) {
                    if(justep.Browser.IE8)
                        alert("action返回值:"+data.text);
                    else
                        alert("action返回值1:"+data.textContent);
               }
        }
};




我想要的是   我通过div里的这个上传功能,让别人  在上传他自己本地的文件,然后把这个文件上传到服务器上,然后我可以取到这个文件的绝对路径。我是用mysql里的
load data infile '路径' ignore into table KaoQDR character set gbk fields terminated by'\"'
然后把上传上来的文件  ,通过上面的 SQL语句接在到数据库的表中。
我怎么实现,怎么得到  那个文件的路径,假使这个文件上传成功,到服务器上的哪里了。

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35918
发表于 2015-6-18 17:10:22 | 显示全部楼层
你在new File的时候就设置了路径了,可以自己控制上传的你固定的目录中。案例中是上传到了tomcat的temp下
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

67

主题

211

帖子

532

积分

高级会员

Rank: 4

积分
532
QQ
 楼主| 发表于 2015-6-19 19:44:35 | 显示全部楼层
本帖最后由 xiaozhi 于 2015-6-19 19:58 编辑
jishuang 发表于 2015-6-18 17:10
你在new File的时候就设置了路径了,可以自己控制上传的你固定的目录中。案例中是上传到了tomcat的temp下 ...

嗯,您好,那怎么得到上传到temp里文件的文件名呢?在别的方法中用到这个名字。我是这样得到的。
  /**
     * 上传
     * @param uploadFile
     * @param str
     * @return
     */
        public static   String FileName ="";                    

        public static String UploadFile(InputStream  uploadFile,String str){
                       System.out.println("字符串参数为:" + str);
           String name = java.util.UUID.randomUUID().toString();
           File file = new File(getTempDir() + "/" + name + ".txt");
           if (file.exists())
                   file.delete();
           FileOutputStream output;
           try {
                   output = new FileOutputStream(file);
                   try {
                           byte[] bs = new byte[1024*4];
                           int i = -1;
                           while ((i = uploadFile.read(bs)) != -1) {
                                   output.write(bs, 0, i);
                           }
                           output.flush();
                           System.out.println("文件名:" + file.getName());

                   } finally {
                           output.close();
                   }
           } catch (Exception e) {
                   throw new RuntimeException("上传失败!", e);
           }
          FileName = file.getName();
           return FileName;

        }


然后在别的  方法中  将其富裕一个  变量,
String FileUrl = getTempDir();                        //文件所在的文件夹路径
                FileUrl = FileUrl.replace("\\","/");
                String Name = FileName;
               
                String URL = FileUrl +"/"+Name;
                System.out.println(URL);
                                
                String KaoQSQL = "";                //考勤机 到数据库
        KaoQSQL = "load data infile '"+URL+"' ignore into table KaoQDR character set gbk fields terminated by'\"' lines terminated by '\r\n' ignore 1 lines ";


可是  现在的问题是:我第一次传文件,也就是temp下没有上传的文件,可以上传,但是  我在换一个文件,他有可能得到的名字  就是  上次的,这样的话,导入的数据有问题了。
我想   上面不是  能return  文件名字么,我在iframe里显示了,怎么得到iframe这里面的值啊。这样的话  我就可以  把  文件名字做参数 传回去。这样数据估计就没问题了。iframe  显示

iframe显示.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 11:50 , Processed in 0.066853 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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