input type file 文件上传,input file上传文件
本篇文章给大家谈谈input type file 文件上传,以及input file上传文件对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
有关java上传和File以及FileInputStream的区别
1:PostUploadInfo的js是页面<ai:fileupload标签自动加载的AIFileUpload.js里的方法
这里的ActionDocumentInfo.java注意与FtpUtilPro.java(它的一个upload方法有bug)的对比能
看出后者的bug.
从这个bug要看出File与FileInputStream的区别,File不属于流,它只是用来屏闭不同文件系统,用来统一
描述文件的实体BEAN,new File时给它传入文件名称或是路径,它就会去根据参数查找对应的文件属性然后封装
成实体。用来处理判断该路径是一个文件还是路径,文件或路径的权限,修改时间等等,路径的子路径list等等目录操作。
File不属于文件流,只能代表一个文件或是目录的路径名而已.
而FileInputStream关注的是文件的内容,是用来进行文件读写等操作的二进制流类。大多数情况下,构造FileInputStream
时传递一个File对象做参数,也可以直接传递String的文件路径。
这个容易混淆的问题在FTP时候很容易出现,因为客户端点击浏览本地文件后在上传时在服务器端如果直接把客户端的
文件名称拿到,然后用new File(“文件名称路径”),再用new InputStream(File)来上传到FTP的话,其实就是相当于服务器
端在服务器本地找File(“文件名称路径”),然后往FTP上传,这是错误的。我们希望的是上传客户端的文件,而不是
服务器端的文件,所以这里应该是直接用apache的FileItem.getInputStream的结果直接upload,如下:
InputStream fileIn= item.getInputStream();////如果直接写成这样new FileInputStream(filePath);就会出现在服务器本机找file上传的问题
//可以查看item.getInputStream()最后其实是从memoryOutputStream(内存里记忆的客户端文件流)来取流的句柄的。
以下是正确的实现
[code]
/**上传附件的时候调用
*@param request
*@param response
*@throws Exception
*/
public void doUpload(HttpServletRequest request, HttpServletResponse response) throws Exception{
CustomProperty cp= CustomProperty.getInstance();
try{
//调用apache控件上传文件,返回数组,第一个存放文件对象,第二个存放参数对象
Object obj[]= ApacheUploadTool.getUploadFileInfo(request);
List fileList=(List)obj[0];
Map paras=(Map)obj[1];
if(fileList== null|| fileList.size()==0){
cp.set("MESSAGE","找不到上传的文件");
return;
}
String aVirtualFileName="";
String newId="";
String newFileName="";
String aFileType="";
String docSize="";
String editMode= HttpUtil.getParameter(request,"edit_mode");
String objectId= HttpUtil.getParameter(request,"OBJECT_ID");
String busiType= HttpUtil.getParameter(request,"BUSI_TYPE");
//陈超调试修改添加的输出
// System.out.println("================"+editMode);
//保存附件信息
for(int i=0;i<fileList.size();i++){
FileItem item=(FileItem)fileList.get(i);
//获取文件流、文件名称
String fileName= fixFileName(item.getName());
IDocumentInfoSV idao= CommonService.getIDocumentInfoSV();
docSize= String.valueOf(item.getSize());
String codetype= String.valueOf(StaticValue.CFG_FTP_PATH_CODE);
String ftpPathName= BaseDataCodeAction.getCodeName(codetype, busiType);
if(null==ftpPathName||"".equals(ftpPathName)){
throw new Exception("没有该业务对应的FTP路径配置!");
}
//陈超调试的注释
// System.out.println("ftpPathName="+ftpPathName);
FtpUtil ftpUtil= new FtpUtil(ftpPathName);
// FtpUtilPro ftpUtil= new FtpUtilPro(ftpPathName);
//陈超添加的调试输出
// System.out.println("item=="+item);
// System.out.println("item.getInputStream()=="+item.getInputStream());
InputStream fileIn= item.getInputStream();//new FileInputStream(filePath);//如果直接写成这样就会出现在服务器本机找file上传的问题
//可以查看item.getInputStream()最后其实是从memoryOutputStream(内存里记忆的客户端文件流)来取流的句柄的。
//获取新的文件名,判断是否存在
IBODocumentInfoValue[] retValues= CommonService.getIDocumentInfoSV().queryDocumentInfoList(Long.parseLong(busiType), Long.parseLong(objectId));
for(int j=0;j<retValues.length;j++){
String docName= retValues[j].getDocumentName();
if(fileName.equals(docName)){
ExceptionUtil.throwBossException(83000015,new String[]{fileName});
}
}
newFileName= fileName;
if(editMode.equals("addNew")){
//陈超添加的调试输出
// ftpUtil.upload(fileName, fileIn,FtpUtil.BIN);
ftpUtil.upload(fileName, fileIn,FtpUtil.BIN);
}
else if(editMode.equals("modify")){
// System.out.println("================"+HttpUtil.getParameter(request,"DOCUMENT_ID"));
String oldId= HttpUtil.getParameter(request,"DOCUMENT_ID");
IBODocumentInfoValue acond= new BODocumentInfoBean();
acond.setDocumentId(Long.parseLong(oldId));
//陈超更改查询STATE为1
acond.setState(1);
IBODocumentInfoValue[] beanValues= idao.getDocumentInfo(acond,"",null);
if(null== beanValues|| beanValues.length==0){
throw new Exception("没有文档信息");
}
IBODocumentInfoValue beanValue= beanValues[0];
String oldFileName= beanValue.getDocumentName();
ftpUtil.upload(oldFileName, fileIn,FtpUtil.BIN);
}
if(i==0){
aVirtualFileName= newFileName;
}else{
aVirtualFileName= aVirtualFileName+","+ newFileName;
}
}
cp.set("IsOk","TRUE");
cp.set("MESSAGE","附件"+aVirtualFileName+"上传成功!");
cp.set("VIRTUAL_FILE_NAME_LIST", aVirtualFileName);
cp.set("DOCUMENT_ID", newId);
cp.set("DOCUMENT_SIZE", docSize);
} catch(Exception ex){
cp.set("IsOk","FALSE");
cp.set("MESSAGE",StaticValue.SYS_ERROR_INFO);
log.error(ex);
if(!ex.equals("")){
cp.set("MESSAGE",ExceptionUtil.getBossExceptionHint(ex));
}
}finally{
ApacheUploadTool.showFileUploadMsg(response,cp);
}
}
[/code]
附件是自己的ftp实现示例,和一些网上最简单的jsp上传的代码,也最能说明原理
ios通过input标签type为file上传文件时没有上传
请问您想问的是“ios通过input标签type为file上传文件时没有上传的原因”这个问题吗?该问题可能有以下几种原因:
1、文件大小限制:iOS设备通常对文件上传大小有限制。默认情况下,可能不允许上传超过一定大小的文件。您可以在应用程序的Info.plist文件中增加适当的键值对来允许更大文件大小的上传。例如,您可以添加MaximumFileSize键并设置适当的值。
2、网络问题:如果您的应用程序没有稳定的和可用的网络连接,文件上传可能会失败。请确保您的设备连接到可用的网络,并检查网络连接是否正常。
通过input的file属性将文件用php的ftp上传到服务器
html部分:
<html>
<body>
<formaction="upload_file.php"method="post"
enctype="multipart/form-data">
<labelfor="file">Filename:</label>
<inputtype="file"name="file"id="file"/>
<br/>
<inputtype="submit"name="submit"value="Submit"/>
</form>
</body>
</html>
提示:
<form>标签的enctype属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data"。
<input>标签的type="file"属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。php部分:
创建上传脚本
"upload_file.php"文件含有供上传文件的代码:
<?php
if($_FILES["file"]["error"]>0)
{
echo"Error:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/1024)."Kb<br/>";
echo"Storedin:".$_FILES["file"]["tmp_name"];
}
?>
通过使用PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的inputname,第二个下标可以是"name","type","size","tmp_name"或"error"。就像这样:
$_FILES["file"]["name"]-被上传文件的名称
$_FILES["file"]["type"]-被上传文件的类型
$_FILES["file"]["size"]-被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"]-存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"]-由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。
上传限制
在这个脚本中,我们增加了对文件上传的限制。用户只能上传.gif或.jpeg文件,文件大小必须小于20kb:
<?php
if((($_FILES["file"]["type"]=="image/gif")
||($_FILES["file"]["type"]=="image/jpeg")
||($_FILES["file"]["type"]=="image/pjpeg"))
&&($_FILES["file"]["size"]<20000))
{
if($_FILES["file"]["error"]>0)
{
echo"Error:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/1024)."Kb<br/>";
echo"Storedin:".$_FILES["file"]["tmp_name"];
}
}
else
{
echo"Invalidfile";
}
?>
注释:对于IE,识别jpg文件的类型必须是pjpeg,对于FireFox,必须是jpeg。
保存被上传的文件
上面的例子在服务器的PHP临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:
<?php
if((($_FILES["file"]["type"]=="image/gif")
||($_FILES["file"]["type"]=="image/jpeg")
||($_FILES["file"]["type"]=="image/pjpeg"))
&&($_FILES["file"]["size"]<20000))
{
if($_FILES["file"]["error"]>0)
{
echo"ReturnCode:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/1024)."Kb<br/>";
echo"Tempfile:".$_FILES["file"]["tmp_name"]."<br/>";
if(file_exists("upload/".$_FILES["file"]["name"]))
{
echo$_FILES["file"]["name"]."alreadyexists.";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/".$_FILES["file"]["name"]);
echo"Storedin:"."upload/".$_FILES["file"]["name"];
}
}
}
else
{
echo"Invalidfile";
}
?>
上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。
注释:这个例子把文件保存到了名为"upload"的新文件夹。
好了,文章到此结束,希望可以帮助到大家。