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);

java文件上传过程的时候有中文就很出现乱码,通常获取到的文件中通常都是“iso8859-1”格式,需要转换为“UTF-8”格式。
如: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文件上传时提示(文件名,目录名或卷标语法不正确)的主要内容,如果未能解决你的问题,请参考以下文章

Java 上传 文件 报错:文件名、目录名或卷标语法不正确

命令提示符提示文件名,目录或卷标语法不正确怎么办

Web 开发中 文件上传 是出现的:java.io.FileNotFoundException: (文件名目录名或卷标语法不正确。)

文件名、目录名或卷标语法不正确

win8文件名目录名或卷标语法不正确怎么办?

jsp文件名 目录名或卷标语法不正确怎么办