html5 - H5提交MIME类型为multipart/form-data类型的表单,后端如何处理(比如java,.NET)?
怪我咯
怪我咯 2017-04-18 10:29:57
0
3
765
<form action="example.jsp" enctype="multipart/form-data" method="POST">
    <label for="fname">请选择</label>
    <input type="file" name="fname"/>
</form>
怪我咯
怪我咯

走同样的路,发现不同的人生

reply all(3)
迷茫
/**
     * 上传图片接口,任务详情的插图和评论的插图都用
     * 
     * @param request
     * @param taskId
     * @param taskDiscussId
     * @return
     */
    @RequestMapping(value = "tasks/{taskId}/files", method = RequestMethod.POST)
    public Results<String> uploadFiles(HttpServletRequest request, @PathVariable Integer taskId,
            Integer taskDiscussId) {
        Results<String> r = new Results<String>();
        r.setCode(StatusCode.OK);
        try {
            // 上传图片处理
            CommonsMultipartResolver multipartResolver =
                    new CommonsMultipartResolver(request.getSession().getServletContext());
            if (!multipartResolver.isMultipart(request)) {
                r.setCode(StatusCode.FAIL);
                r.setMessage("没有接收到文件,请重新选择!");
                return r;
            }
            // 将请求还原成文件上传请求
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile mf = multipartRequest.getFile("file");

            // 验证文件后缀是否正确
            if (!FileFormatUtil.checkFileFormat(mf.getOriginalFilename(), FileFormat.IMAGE)) {
                HugeServerException.throwException("用户上传头像格式错误", StatusCode.USER_IMG_FOR_ERROR);
            }
            // 这里是上传文件,返回保存的路径
            String savePath = null;
            // 前台有传评论ID的话,那就是上传评论的插图(目前只有上传图片,无其他格式文件)
            if (taskDiscussId == null) {
                savePath = UploadFileUtils.uploadFile(request, mf, ConfigParam.task_attach);
                TaskFile file = new TaskFile();
                file.setTaskId(taskId);
                file.setFileType(FileType.IMAGE.getValue());
                file.setFileName(mf.getName());
                file.setFilePath(savePath);
                taskFileService.insert(file);
            }
            else {
                savePath = UploadFileUtils.uploadFile(request, mf, ConfigParam.task_discuss_attach);
                TaskDiscussFile file = new TaskDiscussFile();
                file.setTaskDiscussId(taskDiscussId);
                file.setFileType(FileType.IMAGE.getValue());
                file.setFileName(mf.getName());
                file.setFilePath(savePath);
                taskDiscussFileService.insert(file);
            }
            r.setData(savePath);
        }
        catch (Exception e) {
            log.error("File upload failed.", e);
            r.setCode(StatusCode.TASK_FILE_UPLOAD_FAIL);
            r.setMessage("任务文件上传失败!");
        }
        return r;
    }
public class UploadFileUtils extends BaseFile{
    
    
    public static String getNewFileName(String suffix){
        if(StringUtils.isEmpty(suffix)){
           return null;
        }
        return new Date().getTime()+UNDERLINE+(new Random().nextInt(100000000)+1)+POINT+suffix;
    }
    
    

    public static String uploadFile(HttpServletRequest request,MultipartFile file, String fileSavePath) throws Exception{
        if(file == null){
            return "";
        }
        String originalFilename = file.getOriginalFilename();
        if(StringUtils.isBlank(originalFilename)){
            return "";
        }
        //boolean isr = FileFormatUtil.checkFileFormat(originalFilename, fileFormat);
        /*if(!isr){
            throw new HugeFileException("上传文件格式错误,请重试");
        }*/
        //物理路径
        String wlPath = getFullPath(request,fileSavePath);
        File f = new File(wlPath);
        if(!f.exists()){
            f.mkdirs();
        }
        //获取后缀名
        String suffix = FileUtils.getFileSuffix(originalFilename);
        //通过后缀名,获取新的一个文件名
        String newFileName = getNewFileName(suffix);
        wlPath = wlPath+SPRIT+newFileName;
        //这个参数是为了保存到数据库中的值
        String ljPath = fileSavePath +SPRIT+newFileName;
        //保存文件
        copy(file.getInputStream(), wlPath);
        //file.transferTo(new File(f.getAbsolutePath(),newFileName));
        return ljPath;
    }
    

    private static void copy(InputStream fis, String newPath) throws Exception{  
        FileOutputStream fos =null;
        try {
            fos = new FileOutputStream(newPath);
            byte[] buffer = new byte[1024];     
            int len = 0;     
            while ((len = fis.read(buffer)) > 0) {     
                fos.write(buffer, 0, len);     
            }     
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("保存失败");
        }finally {
             try {
                fis.close();
                fos.close(); 
             } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new Exception("保存失败");
             }     
        }
       
    }
    
    
    public static String getFullPath(HttpServletRequest request,String filePath){
        return ConfigParam.path_absolute+filePath;
      //return request.getSession().getServletContext().getRealPath(fileConfig);
    }
    
}
迷茫

The problem has been solved. The .NET file transfer method used in the company is to submit it using AJAX POST method, add relevant parameters after the url, and add the binary stream of the file to the Request Payload

左手右手慢动作

ASP.NET MVC

[HttpPost]
public ActionResult UploadImage(HttpPostedFileBase image){
    image.SaveAs(fileName);
}

ASP.NET Core


[HttpPost]
public IActionResult UploadImage(IFormFile image){
    image.Save(fileName);
}
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!