如何获取file 文件上传是的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取file 文件上传是的参数相关的知识,希望对你有一定的参考价值。

参考技术A package servlet;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class upload extends HttpServlet

/**
*
*/
private static final long serialVersionUID = 2654821751525075943L;
private ServletContext sc;
private String savePath;
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException

doPost(request,response);


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
String username="";
request.setCharacterEncoding("utf-8");
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);//专门用来完成文件上传的类
try
List items=upload.parseRequest(request);//解析请求,返回一个存储了所有表单元素的集合
Iterator it=items.iterator();
while(it.hasNext())
FileItem item=(FileItem)it.next();
if(item.isFormField())//如果是普通的文本信息,返回true
username=item.getString("utf-8");

else
if(item.getName()!=null&&!item.getName().equals(""))//防止抛出空指针,判断一下是否为空
System.out.println("上传文件的大小:"+item.getSize());
System.out.println("上传文件的类型:"+item.getContentType());
System.out.println("上传文件的名称:"+item.getName());
File temp=new File(item.getName());
File file=new File(sc.getRealPath("/")+savePath,temp.getName());
item.write(file);
HttpSession hs=request.getSession();
hs.setAttribute("path", item.getName());
request.setAttribute("msg", "上传文件成功了");

else
request.setAttribute("msg", "上传文件失败了");




catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("msg", "上传文件失败了");

request.getRequestDispatcher("/result.jsp?username="+username).forward(request, response);

/**
* 重写init方法
*/
public void init(ServletConfig config)
savePath=config.getInitParameter("savePath");//获取初始化的参数
sc=config.getServletContext();//获取ServletContext对象,并赋给sc

本回答被提问者和网友采纳

使用 pyspark 提交作业时,如何使用 --files 参数访问静态文件上传?

【中文标题】使用 pyspark 提交作业时,如何使用 --files 参数访问静态文件上传?【英文标题】:While submit job with pyspark, how to access static files upload with --files argument? 【发布时间】:2016-04-28 15:06:00 【问题描述】:

例如,我有一个文件夹:

/
  - test.py
  - test.yml

作业被提交到火花集群:

gcloud beta dataproc jobs submit pyspark --files=test.yml "test.py"

test.py,我想访问我上传的静态文件。

with open('test.yml') as test_file:
    logging.info(test_file.read())

但出现以下异常:

IOError: [Errno 2] No such file or directory: 'test.yml'

如何访问我上传的文件?

【问题讨论】:

我想到的第一件事就是将文件添加到集群可以访问的分布式文件系统(如 HDFS)中。我相信其他人会提供更好的解决方案。 【参考方案1】:

使用SparkContext.addFile(和--files)分发的文件可以通过SparkFiles 访问。它提供了两种方法:

getRootDirectory() - 返回分布式文件的根目录 get(filename) - 返回文件的绝对路径

我不确定是否有任何 Dataproc 特定的限制,但这样的东西应该可以正常工作:

from pyspark import SparkFiles

with open(SparkFiles.get('test.yml')) as test_file:
    logging.info(test_file.read())

【讨论】:

它有效,谢谢!注意:SparkFiles.get 返回文件路径而不是文件 obj!!【参考方案2】:

目前,由于 Dataproc 不再处于测试阶段,为了从 PySpark 代码直接访问云存储中的文件,使用 --files 参数提交作业即可。 SparkFiles 不是必需的。例如:

gcloud dataproc jobs submit pyspark \
  --cluster *cluster name* --region *region name* \
  --files gs://<BUCKET NAME>/<FILE NAME> gs://<BUCKET NAME>/filename.py

在通过 Spark API 从 gcs 读取输入时,它可以与 gcs 连接器一起使用。

【讨论】:

【参考方案3】:

是的,Shagun 是对的。

基本上,当您向 spark 提交 spark 作业时,它不会将您要处理的文件序列化给每个工作人员。你必须自己做。

通常,您必须将文件放在共享文件系统中,例如 HDFS、S3(亚马逊)或所有工作人员都可以访问的任何其他 DFS。只要您这样做,并在您的 spark 脚本中指定文件目标,spark 作业将能够按照您的意愿读取和处理。

但是,话虽如此,将文件复制到所有工作人员和主人的文件结构中的相同目标也可以。 exp,你可以在所有spark节点中创建/opt/spark-job/all-files/之类的文件夹,rsync文件到所有节点,然后你可以在你的spark脚本中使用文件。但请不要这样做。 DFS 或 S3 比这种方法要好得多。

【讨论】:

application-jar:包含您的应用程序和所有依赖项的捆绑 jar 的路径。 URL 必须在集群内全局可见,例如,所有节点上都存在 hdfs:// 路径或 file:// 路径。来自spark.apache.org/docs/latest/submitting-applications.html

以上是关于如何获取file 文件上传是的参数的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何在上传期间获取tmp文件大小

js 如何获取上传文件的大小

Node.js如何获取文件大小

如何在上传Drupal 8后获取文件名?

如何从 javascript 中的 URL 获取 File() 或 Blob()?

如何在codeigniter中获取上传文件的完整路径?