我已经使用 html5+文件阅读器进行了带有文件预览的文件上传,它工作正常,除了用户选择的旧文件会从输入文件字段中销毁,并且如果用户在新的单次浏览单击中进行选择。
这是js小提琴 https://jsfiddle.net/sco3pq3b/
html
<p> UPLOAD </p>
<input type="file" multiple="yes" name="photo[]" id="photos">
<div id="preview"></div>
Run Code Online (Sandbox Code Playgroud)
js
$("#photos").change(function(){
var fileList = this.files;
var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.jpg|.jpeg|.gif|.png|.bmp)$/;
for(var i = 0; i < fileList.length; i++){
if (regex.test(fileList[0].name.toLowerCase())) {
var reader = new FileReader();
reader.onload = function (e) {
$('#preview').append('<div class="imgLinkWrap"><a class="fancybox" href="' + e.target.result +'">'+fileList[0].name.toLowerCase()+'</a></div>');
}
console.log(fileList[i]);
reader.readAsDataURL(fileList[i]);
} else {
alert(file[0].name + " is not a valid image file.");
$('#preview').html("");
return false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
单击新的浏览文件后,是否有办法在不使用任何插件或ajax的情况下保留旧文件?
我有这个表格,它有一个文件上传按钮。当您选择一个文件时,它会显示在 upload_prev div 中。我的问题是,当我尝试选择同一个文件时,什么也没有发生。我想要一个验证或一种非重复函数来运行。我就是这么做的。我尝试了很多东西和方法,比如使用子节点并查看内部文本是否相同。我尝试使用 jquery 每个循环并获取值,但所有这些都失败了。当我再次选择它时,我想显示一条消息,该文件已经在upload_prev的Box中。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="https://code.jquery.com/jquery-1.10.1.js"></script>
<link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css">
<link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css">
<style type="text/css">
.fileUpload {
position: relative;
overflow: hidden;
margin: 10px;
}
.fileUpload input.upload {
position: absolute;
top: 0;
right: 0;
margin: 0;
padding: 0;
font-size: 20px;
cursor: pointer;
opacity: 0;
background-color: #fff;
filter: alpha(opacity=0);
}
.buttonwrap {
text-align: center;
padding-top: 20px;
float: left;
display: block;
}
.buttonsend:hover {
background-color: rgba(255, 255, 255, 0.2);
color: #225C51; …Run Code Online (Sandbox Code Playgroud) 我对 Django 还很陌生,并且已经找到了一些关于如何限制通过 Django 的 FileField 上传的文件类型的优秀 答案。但是,这些答案涉及单个文件上传的情况。我正在处理多个文件上传的情况,如下所示:
表格.py
from django.core.exceptions import ValidationError
class DocumentForm(forms.Form):
def clean_docfile(self):
file = self.cleaned_data["docfile"]
if not file.name.endswith('.txt'):
raise ValidationError(u'Error: Text files only.')
return file
docfile = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}),
label='Select some files'
)
Run Code Online (Sandbox Code Playgroud)
模型.py
from django.db import models
from myproject.myapp.validators import validate_file_extension
class Document(models.Model):
docfile = models.FileField(upload_to=_upload_path, validators = [validate_file_extension])
Run Code Online (Sandbox Code Playgroud)
验证器.py
from django.core.exceptions import ValidationError
def validate_file_extension(value):
if not value.name.endswith('.txt'):
raise ValidationError(u'Error: Text files only.')
Run Code Online (Sandbox Code Playgroud)
我希望用户能够一次上传多个文件,但如果至少有一个文件的文件类型不正确,则所有文件都会被拒绝。
目前,clean_docfile 似乎只检查按字母顺序最后出现的文件名。因此,文件选择 [A.txt, B.txt, C.png] 不会上传(按预期),但 [A.txt, …
class AddProductForm(FlaskForm):
product_pictures = MultipleFileField('Pictures')
submit = SubmitField('Add Pictures')
def product_add_pics():
form = AddProductForm()
if form.validate_on_submit():
if form.product_pictures.data:
for picture_upload in form.product_pictures.data:
print(type(picture_upload))
Run Code Online (Sandbox Code Playgroud)
形式:
<div class="form-group">
{{ form.product_pictures.label() }}
{{ form.product_pictures(class="form-control-file") }}
{% if form.product_pictures.errors %}
{% for error in form.product_pictures.errors %}
<span class="text-danger">{{ error }}</span>
{% endfor %}
{% endif %}
</div>
Run Code Online (Sandbox Code Playgroud)
我总是将类型作为字符串。我怎样才能得到二进制文件?我使用 wtforms 中的 MultipleFileField。
我需要使用Jersey的多个文件上传帮助.我使用以下代码使用Jersey上传单个文件.
package my.first.rest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;
@Path("uploadfile")
public class Upload {
String location;
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadfile(@FormDataParam("file") InputStream is, @FormDataParam("file") FormDataContentDisposition filedetail){
saveToDisk(is,filedetail);
return "File Uploaded Succesfully_"+location;
}
private void saveToDisk(InputStream is1,
FormDataContentDisposition filedetail) {
// TODO Auto-generated method stub
location = "E://upload/"+filedetail.getFileName();
try{
OutputStream out = new FileOutputStream(new File(location));
int read = 0;
byte[] bytes = …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 swagger 操作进行多个文件上传。以下是我正在使用的代码:
class uploadImage(Resource):
@swagger.operation(
notes='Upload an image file',
parameters=[
{
"name": "file[]",
"description": "Upload an image file. File size limit is 3MB. Only '.jpg' is allowed ",
"required": True,
"allowMultiple": True,
"dataType": 'file',
"paramType": "form"
}
])
def post(self):
files=request.files.getlist['file[]']
filenames = []
for file in files:
filename = secure_filename(file.filename)
filenames.append(filename)
print "Files are uploaded successfully"
Run Code Online (Sandbox Code Playgroud)
虽然我在代码中插入了“allowMultiple”:True,但它没有显示在swagger UI中。服务器启动后,我尝试查看html源代码,“多个”不会显示在表单中。
以下是服务器启动时swagger ui的源代码:
<input class="parameter" type="file" name="file[]">
Run Code Online (Sandbox Code Playgroud)
中缺少“多个”一词。
如果我编辑源代码并添加“多个”一词,如下所示,我可以选择多个文件。
<input class="parameter" type="file" name="file[]" multiple>
Run Code Online (Sandbox Code Playgroud)
在这种情况下, “allowMultiple”:True对我来说不起作用。
对我有什么想法或建议吗? …
我正在尝试通过 Ajax 将数据(输入文本、下拉列表等)和文件发送到 PHP 文件。我使用此函数添加名为Action 的额外参数。操作可以是以下一些文本:“添加”、“编辑”、“读取”和“删除”(增删改查选项)。请参阅下面的脚本:
\n\nfunction recordActions(action_name, id) {\n //id = (typeof id == "undefined") ? \'\' : id;\n\n var frm = document.getElementById(action_name + \'_form\');\n var form_data = new FormData();\n\n form_data.append(\'action\', action_name);\n form_data.append(\'fd\', frm);\n\n $.ajax({\n type: \'post\',\n dataType: \'json\',\n url: \'<?php echo FILENAME_USERS_ACTIONS; ?>\',\n data: form_data, \n cache: false,\n processData: false,\n contentType: false,\n success:\n if (data.action == \'add\' || data.action == \'edit\') {\n $("#" + action_name + \'_form\')[0].reset();\n $("#" + action_name + \'_div\').slideUp();\n }\n showWeekAgenda();\n\n } …Run Code Online (Sandbox Code Playgroud) javascript ×2
jquery ×2
python ×2
rest ×2
ajax ×1
django ×1
duplicates ×1
file-upload ×1
filefield ×1
filereader ×1
flask ×1
html ×1
java ×1
jersey ×1
php ×1
python-2.7 ×1
swagger ×1
swagger-ui ×1
wtforms ×1