java文件上传时提示(文件名,目录名或卷标语法不正确)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java文件上传时提示(文件名,目录名或卷标语法不正确)相关的知识,希望对你有一定的参考价值。
代码功能: 在网页有一个添加商品的共能,把商品的内容填完之后,能插到数据库中,但是有一个文件上传的功能,,老是过不去,,求助啊!!!!!
提交结果:java.io.FileNotFoundException: E:\tomacat\apache-tomcat-6.0.36\webapps\Estore\WEB-INF\upload\a\e\2\2\f\f\8\4\0fd069ee-3573-4ffa-a845-1be1c6b82d5c_C:\Users\lenovo\Desktop\estore系统素材\image\1.jpg (文件名、目录名或卷标语法不正确。)
代码如下:
ProdService service = BasicFactory.getFactory().getInstance(ProdService.class); try
String encode = this.getServletContext().getInitParameter("encode");
//前置定义一个map;
MapparamMap = new HashMap();
//1.上传图片
代码省略
Listlist = fileUpload.parseRequest(request);
for(FileItem item : list)
if(item.isFormField())
String name = item.getFieldName();
String value = item.getString(encode);
paramMap.put(name, value); else
String realname = item.getName();
String uuidname = UUID.randomUUID().toString()+"_"+realname;
String hash = Integer.toHexString(uuidname.hashCode());
String upload = this.getServletContext().getRealPath("WEB-INF/upload");
String imgurl = "/WEB-INF/upload";
for(char c : hash.toCharArray())
upload+="/"+c;
imgurl+="/"+c;
imgurl +="/"+uuidname;
paramMap.put("imgurl", imgurl);
File uploadFile = new File(upload);
if(!uploadFile.exists())
uploadFile.mkdirs();
InputStream in = item.getInputStream();
//87行过不去!
OutputStream out = new FileOutputStream(new File(upload,uuidname));
//流对接
IOUtils.In2Out(in, out);
IOUtils.close(in, out);
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");进行下强制转换后在进行读取即可。
备注:上面str就是文件路径和对应的名称,通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。 参考技术A 文件路径找不到啊~C:\Users\lenovo\Desktop\estore系统素材\image\1.jpg最好是中间别有:
文件名、目录名或卷标语法不正确
【中文标题】文件名、目录名或卷标语法不正确【英文标题】:filename, directory name or volume label syntax is incorrect 【发布时间】:2016-03-08 14:49:44 【问题描述】:当我在命令提示符下运行此 .bat 文件时,它会引发错误,即“”。
批处理文件包含--
nmake /nologo /f makefile /a
pause
makefile 包含以下内容:
# nmake makefile to build a sample ADK MAC compliant application
# NOTE: EOSSDK is needed to resolve ADK Library references and header file includes
VRXSDK = C:\eVoAps\SDK\1.2.0\VRXSDK
#VXEOS = C:\eVoAps\EOSSDK\2.1.4
ADK = C:\eVoAps\ADK
VSFSTOOL = C:\Program Files\VERIFONE\FST
VRXIncludes = $(VRXSDK)\include
ADKIncludes = $(ADK)\VRX\Include
EOSIncludes = $(EOSSDKNEW)\include\ssl2
IncDir = .\Source
SrcDir = .\Source
ObjDir = .\Objects
OutDir = .\Download
EOSObjects = C:\eVoAps\SDK\1.2.0\EOSSDKNEW\lib
Includes = -I$(IncDir) -I$(VRXIncludes) -I$(EOSIncludes) -I$(ADKIncludes) -I$(SrcDir)
# Compiler options
# Ignoring warning 1295 - Deprecated declaration - give arg types
# Defiing _VRXEVO for Verix specific code in the sample.
COptions = -vsoapp -g -p -armcc,"--diag_suppress 1295" -D _VRXEVO -DLOGAPI_ENABLE_DEBUG -DVFI_GUIPRT_IMPORT -DVFI_MAC_DLL_IMPORT -DVFI_IPC_DLL_IMPORT -DVFI_SYSINFO_DLL_IMPORT -DVFI_SYSBAR_DLL_IMPORT
LinkOptions = -vsoapp -g -p
# NOTE: elog.o required to resolve references in the ADK libs. Log lib requires STL
# LibVFIMac only needed to resolve sysShowDesktop()
# svc_net.o required for mac library....
Libs = $(ADK)\vrx\lib\libvfiguiprt.so \
$(ADK)\vrx\lib\libvfiipc.so \
$(ADK)\vrx\lib\liblog.so\
$(ADK)\vrx\lib\libvfimac.so \
$(VRXSDK)\lib\vxstl.so \
$(EOSSDKNEW)\lib\svc_net.o \
$(EOSSDKNEW)\lib\elog.o
AppObjects = $(ObjDir)\BossApp.o
$(OutDir)\BossApp.vsa.p7s : $(OutDir)\BossApp.vsa
"$(VSFSTOOL)\FST" BossApp.fst
$(OutDir)\BossApp.vsa : $(AppObjects)
$(VRXSDK)\bin\vrxcc $(AppObjects) $(Libs) -o $@
$(VRXSDK)\bin\vrxhdr -s 128000 -h 128000 -l ELOG.LIB=N:/ELOG.LIB -l NET.LIB=N:/NET.LIB
$(OutDir)\BossApp.vsa
###### Compile #######
$(ObjDir)\BossApp.o : $(SrcDir)\BossApp.cpp
$(VRXSDK)\bin\vrxcc -c $(Includes) $(COptions) -o $(ObjDir)\BossApp.o $(SrcDir)\BossApp.cpp
我无法弄清楚我在这里缺少什么。请帮助我。
【问题讨论】:
如果您希望我们帮助您,您需要描述您期望发生的事情以及代码的实际作用...... ...这是什么语言?不是批的。看起来好像有人试图为 Windows 编写 bash。是 PowerShell 吗? 这是生成文件。批处理文件包含-- nmake /nologo /f makefile /a pause 批处理文件工作正常,它调用nmake
。在您的makefile 中是一个错误,但这与批处理文件完全无关。调试代码总是一个好主意,在错误周围放置一些 echo
语句
好的,你能告诉我这个错误是什么意思吗?
【参考方案1】:
这可能是只有极少数人的原因,但我从我机器上的任何 .BAT 文件(恰好是 Windows Server 2019)中收到此错误。在我的情况下,我收到了错误,因为我最近安装了ConEmu(控制台替换应用程序)并将其设置为集成模式(它替换了普通的 CMD 应用程序)并且无法正确启动 .BAT 文件。关闭 ConEmu 的集成模式后,我的 .BAT 文件又开始工作了。
【讨论】:
【参考方案2】:这个程序不是用windows批处理写的。需要用windows批处理语言编写,由cmd.exe
处理。
【讨论】:
批处理文件包含-- nmake /nologo /f makefile /a pause以上是关于java文件上传时提示(文件名,目录名或卷标语法不正确)的主要内容,如果未能解决你的问题,请参考以下文章
Web 开发中 文件上传 是出现的:java.io.FileNotFoundException: (文件名目录名或卷标语法不正确。)