Automatically renaming an uploaded file
I am creating a page to upload files, as well as to submit
data about the file to be stored in a database. When the form data
is submitted, how can I program it to automatically rename the
uploaded file to the ID or Key number of the row in the database in
which the file's information is stored?
What scripting language are you using?
Murray --- ICQ 71997575
Adobe Community Expert
(If you *MUST* email me, don't LAUGH when you do so!)
==================
http://www.dreamweavermx-templates.com
- Template Triage!
http://www.projectseven.com/go
- DW FAQs, Tutorials & Resources
http://www.dwfaq.com - DW FAQs,
Tutorials & Resources
http://www.macromedia.com/support/search/
- Macromedia (MM) Technotes
==================
"AngryCloud" <[email protected]> wrote in
message
news:evmlp4$lfh$[email protected]..
>I am creating a page to upload files, as well as to
submit data about the
>file
> to be stored in a database. When the form data is
submitted, how can I
> program
> it to automatically rename the uploaded file to the ID
or Key number of
> the row
> in the database in which the file's information is
stored?
>
Similar Messages
-
Automatically Renaming and Sorting Files
When I first installed iTunes, I remember it asking me something about automatically sorting and finding file information for the existing music on my computer (Windows Based). I didn't want to do that at the time, but I would like to if that is indeed what it does. Do you know what I'm talking about? Help please!
Thanks,
ChrisThe feature won't find info about the files, but it will reorganize them on the hard drive.
It's an irreversible procedure, and can be found in edit\prefs\advanced\keep iTunes music folder organized. -
I was wondering if anyone knows how to set up a trigger to automatically rename a file on upload to change spaces into underscores using DToolbox image and resize feature. An example is from "My picture.jpg" to "My_picture.jpg". I also wonder if this could be part of a form validation? Maybe using a spry widget?
I have no experience with triggers, and especially the adobe tng.FileUpload.class.php file (which I assume is where to change the trigger? or maybe it's in the tng.ImageUpload.class.php file?)
Thanks for the help!
-ChrisHi Chris,
fotunately I already made such a modification to ADDT´s predecessor "MX Kollection", and as the core files didn´t change, it will assumingly work the same:
1. add the following function to the file "includes/common/KT_functions.inc.php":
replace all chars from uploaded filenames other than alpha-numeric and "_" and "-" and "." with an underscore (_)
function KT_websafe_filename($text) {
return preg_replace("/[^a-zA-Z0-9\-_\.]+/", "_", $text);
2. change line 120 in file "includes/common/lib/file_upload/KT_FileUpload.class.php":
old: $fileName = KT_replaceSpecialChars($fileName, 'filter');
new: $fileName = KT_websafe_filename($fileName, 'filter');
This modification will of course *always* be renaming the uploaded file accordingly -- but you´ll need no fancy trigger and anything else.
Please backup the 2 original files !!
Günter Schenk
Adobe Community Expert, Dreamweaver -
Hi, I am trying to figure out a way to automatically rename a
file as it is uploaded by a user of my website based on a
recordset. Does anyone have any idea on how to do this. The file
will not be just one type but both images (JPG) and video (AVI).
Thanks,
CraigHow easy this will be depends upon the server langauge that
you are using.
Paul Whitham
Certified Dreamweaver MX2004 Professional
Adobe Community Expert - Dreamweaver
Valleybiz Internet Design
www.valleybiz.net
"h2ojefe" <[email protected]> wrote in
message
news:e7b1aq$pum$[email protected]..
> Hi, I am trying to figure out a way to automatically
rename a file as it
> is
> uploaded by a user of my website based on a recordset.
Does anyone have
> any
> idea on how to do this. The file will not be just one
type but both images
> (JPG) and video (AVI).
>
> Thanks,
> Craig
> -
What's the best approach to automatically upload file to Sharepoint?
Hi xMII experts,
Does anyone have experience on how to automatically upload the file Sharepoint(Windows Sharepoint Services) ? I tried to google but only find the below solutions:
--Create a .Net application.Write the Webservice reference in the code.
http://www.sharepointblogs.com/ssa/archive/2006/11/30/wsuploadservice-web-service-for-uploading-documents-into-sharepoint.aspx
--Create a Java application with the Webservice reference.
http://www.eggheadcafe.com/software/aspnet/31499846/uploading-files-to-a-docu.aspx
My intention is to minimize the program or coding effort, which can't be satisfied by the above two ways.
Looking forward to your responses
Best Regards
Terrance LiangHello Terrance,
You want to do this using the MII? or you want to create an interface in the MII to exchange files between servers?
Let me know your idea.
Regards,
Danilo -
When I download a file, if a file of similar name already exists in the same download folder, the firefox downloads the file and renames it by adding numeric .1 to the file name.
I want the firebox to give me a prompt that similar file already exist, rather than automatically renaming it by adding suffix .1.Downloads Options
* https://support.mozilla.com/en-US/kb/Options%20window%20-%20General%20panel#w_downloads
Unable to Download or Save files
* https://support.mozilla.com/en-US/kb/Unable%20to%20download%20or%20save%20files
Check and tell if its working. -
Multiple files with same name--- automatic renaming option??
I am trying to sort my files by adding multiple files to a single folder. However, many have the same filename, and I get the error " there already exists a file with the name "x", please choose another name" etc. I am dealing with thousands of files here that are very tedious to rename individually. Is there an option or program that either disables this block on multiple files with the same name in a common folder, or automatically renames the files as they are placed in the folder?
i would like all the files to have different names, but not have to do it myself. they are generated my my audio recorder, which automatically names files take1, take2, take3 etc. multiple sessions entail multiple folders, i am trying to consolidate.
-
Return renamed uploaded file name
Hey,
I'm trying to upload a file from flash(selected via
filereference) via php, i rename(in php) the file before uploading
it. this isn't a problem and works great but then i need to return
the new filename to flash so i can save a link to it in my
database.
my biggest problem is that i use file.upload(phpScriptPath)
to upload the file. But if i use the echo command in php to return
newFilename i don't know how to capture this information in flash.
does anybody help me out?
thx on advanceYou can't return the new filename using the FileReference
object so you need a workaround. From what you posted here I can't
put my finger on the right solution but to illustrate:
I needed a solution as part of a form where the user would
provide name, email and so on and could upload a c.v. Before the
file upload I used a LoadVars (and used the sendAndLoad() method)
object to post the data from the form and return the record_id from
the database. In the onLoad event of the LoadVars object I used the
FileReference object to handle the upload, calling an upload script
and added the record_id as a get variable. The record_id was then
used to save the new filename of the uploaded file to the database.
If this is not feasible in your situation, elaborate on the
topic by describing your scenario in more detail. -
Automatically renaming pdf.file
Hi,
Does anyone kowns if the following question is possible?
My scanned documentation gets automatically a file name like for example SKM 217362342 etc. These are PDF.files which I then open with adobe acrobat and then I run OCR.
After that I want to save them with a name coming automatically from the pdf.file. For instance the invoice number.
I am not so good in English but I hope you understand my question.
Thanks in advanceMy problems is I send some PDF files to my own email account from my NB. So this way I can transfer these files w/o using iTunes. But when I was opening my email on iPad, some of the files became PDF files by itself. The reason I want to keep them in PDF is because this way I can organize better on iPad; otherwise it will be all in saved photos. It will be too hard to find the file I need.
Thank you -
Automatically renaming pdf files based on excel data
I am creating pdf certificates using variable data from excel files with InDesign. This creates a multipage pdf file with a different persons name on each page. Then end result needs to be individual pdf files named for each person. I can extract the single pages out of the main pdf ending up with however many files all named the same thing besides a number at the end of the common file name. Question: Is there a automated process of renaming the individual files using the data from the excel file?
You're looking for a PDF Parser or PDF miner tool (PDFminer) as a starting framework, and you'll almost certainly be writing custom code around that as parsing a text file that's effectively free-form and originating from multiple different sources almost always (always?) involves writing customized processing code and an on-going series of tweaks as the suppliers of the PDF change their ticket formats. (Even apparently-simple details such as the time and date formats, for instance, can vary by geography and language and by supplier, and can derail common processing.)
In some cases that I can envision, it'd be entirely possible that the data you're after is actually located in an embedded image and not in text that can be parsed.
The best approach is to get folks to send you JSON or XML or some other format intended for interchange, and avoid the whole mess that is parsing or mining a printer-oriented format.
The other obvious option is to use something like Amazon's Mechanical Turk or some other explicitly outsourced help. Depending on how often the formats change and how many of these PDF files you're dealing with and how varied the formats are, sometimes throwing staff at the problem can be the most cost-effective approach. -
Creaky MuVo battery pack? Also, warmness after uploading files (renamed thre
Sorry to keep making threads about little things, but I reckon it's worth checking. My MuVo feels quite a bit hotter after I upload files to it (completely fill over USB2.0 usually). It cools down in a few minutes, but I thought I'd check to see if it's normal behaviour. If it's relevant, the USB connector on the main bit (with the controls) is squint (angled towards the screen face of the player).
Also, my battery module's a bit creaky. When I press buttons on the player or swap the battery I can feel it creaking into different positions. The main player doesn't do this on its own, so I'm wondering if all the battery modules are like that. If not, I might send off for a new battery module as it's only about ?9 and it'd really improve the feel of the player (I hate cheap-feeling plastic if it's something I'm handling a lot).
Edit- Just to elaborate on the "creaky" thing, the battery pack feels really loose and plasticky on its own and when the main player bit's plugged in. This makes the whole thing feel a bit fiddly, creaking when I press down on buttons or the scroller, when in fact the player bit itself feels solid on its own.
Now, if I pop the player in the belt clip holster widget, it suddenly "tightens" up, presumably because the holster is pressing in around the player. It feels really, really solid. Is the problem shared by all the battery packs, or have I just mistreated mine a bit's If it's the latter I'll nab a new battery pack.Message Edited by Sockatume on 06-20-2005 03:44 AMMy Zen Micro heated up a bit when I was charging/transferring files too. I just unplugged it and in a few minutes it was fine. So that seems to be normal. Don't know about the other problem though, sorry.
-
Adobe Muse won't publish (Error uploading file)
After making simple animations using Adobe Edge Animate it seems as though none of the assets will publish with my site after importing them into Muse.
In Edge animate I saved for "web animation" and published. Then I went to muse and hit "place". I went to preview and everything works fine. When I go to publish there are always errors in uploading my assets with '.png' extensions.
Any help is much appreciated. I have completely scrapped my website and created another, reinstalled Animate and have renamed all my files, I'm not sure whats wrong here.
I got one animation working, and that can be seen here under the Photography section, but I have multiples that will be shown on my page at one time.
http://chasebodydesign.businesscatalyst.comI get the error uploading file everytime I try publishing the animation.
-
1. when use com.oreilly.servlet.MultipartRequest to handle the file upload, can I change the upload file name .
2. how com.oreilly.servlet.MultipartReques handle file upload? do it change to byte ?
what different? if I use the following method?
File uploadedFile = (File) mp.getFile("filename");
FileOutputStream fos = new FileOutputStream(filename);
byte[] uploadedFileBuf = new byte[(int) uploadedFile.length()];
fos.write(data);
fos.close();My questions are
1) when use oreilly package to do file upload , it looks like i line of code is enough to store the upload file in the
file direction.
MultipartRequest multi =
new MultipartRequest(request, dirName, 10*1024*1024); // 10MB
why some example still use FileOutputStream?
outs = new FileOutputStream(UPLOADDIR+fileName);
filePart.writeTo(outs);
outs.flush();
outs.close();
2) can I rename the file name when I use oreilly package? -
How to SCAN uploaded files for VIRUS in APEX
part 1:
Goal:
Do a virus scan of the uploaded file from APEX application prior to storing the file in custom tables.
The process:
Followed the document from www.developer.com:
Implementing an Anti-Virus File Scan in JEE Applications
By Vlad Kofman
Go to page: 1 2 3 Next
This article will discuss one of the ways to implement antivirus file scanning in Java, particular in the JEE applications. Viruses, Trojan Horses, and different malware and spyware are a real problem for current computer environments, and especially for the Windows operating system. If you are designing any application in Java that has a requirement to be able to upload external files, you have a potential security risk. By uploading, I mean any way to get the external file inside of the corporate firewall be it via HTTP protocol or any other means. It is quite common to have this type of requirement in an enterprise application and with Java being one of the most popular web development platforms, it is unfortunate that this type of gaping security risk is quite often overlooked.
Java's Development Kit (JDK) does not have any means to do the antivirus scan right out of the box. This is primarily because Java is a programming language, and does not have any virus scanning packages. Furthermore, anti-virus software is not Sun's area of expertise or business model. Developing this type of software (or Java package), and more importantly maintaining it, would be a huge task for Sun. Mainly because viruses are constantly evolving and keeping virus definitions up-to-date is a daunting task. Large companies such as McAffee, Symantec, or Zone Labs develop virus detecting and combating products and spend a lot of resources to maintain them.
Application Environment
To implement a virus file scan in Java, a third-party package needs to be used. For the purposes of this article, I will use Symantec Scan Engine (SSE) package, which comes with Java APIs. This package is an application that serves as a TCP/IP server and has a programming interface and enables Java applications to incorporate support for content scanning technologies. For this article, I used Symantec Scan Engine 5.1, which is available as a Unix or Windows install.
If you are using an anti-virus package from the different vendor, you will need to investigate what kind of APIs are available; however, the general approach should be similar. Also, note that my implementation can be used with JEE technology and any modern MVC framework such as Struts or Spring.
The architecture is as follows: A server machine needs to have SSE running at all times. This can be the same machine that hosts your Application Server, but in an enterprise environment this should be a different machine. The Default Port needs to be open through the firewall to allow communication with the scan engine. All JEE applications that need to do file scanning can talk to the SSE server machine through a default port. Also, multiple applications running on different application servers can re-use the same scanning server. For more information, you should refer to the Symantec Scan Engine (SSE) Installation Guide, available on the Symantec web site.
When an external file that needs to be scanned is sent to the SSE via its programming interface (Java APIs using the default port), before any other operation on the file is performed, the SSE returns a result code. For instance, a file is uploaded by an external user into the web email type application as an attachment; then, the SSE API is invoked by the application and the return code of pass or fail determines the outcome of the upload and whether that email can actually be sent. If you have an account on Yahoo mail, you probably have seen that Yahoo is using Norton Antivirus to scan all attachments, although no Java.
Click here for a larger image.
Figure 1: Screen shot from Yahoo
For details on the Scan Engine Server Installationm please see the Symantec Scan Engine (SSE) Implementation Guide from Symantec.
Here are some key things to remember about SSE:
• Java 2 SE Runtime (JRE) 5.0 Update 6.0 or later must be installed on the server before the SSE installation is done.
• After installation, verify that the Symantec Scan Engine daemon is running. At the Unix command prompt (if it's a Unix install), type the following command:
ps –ea | grep sym.
A list of processes similar to the following should appear:
o 5358 ? 0:00 symscan
o 5359 ? 0:00 symscan
If nothing is displayed the SSE process did not start.
If the SSE process did not start, type the following command to restart SSE:
/etc/init.d/symscan restart
• Keeping the virus definition up to date is the most important task and if new updates are not installed, the whole scan becomes ineffective. Symantec automatically downloads the most current file definitions through LiveUpdate. Please make sure that firewall rules are in place to allow the host server to connect to the Symantec update service.
Project Setup
For the purposes of this article, I included a wrapper for the Symantec SSE APIs, av.jar, which has Symantec Java APIs and serves as a client to the SSE server and takes care of all communications with the server. Please refer to the download source section. The av.jar should be included in the Java CLASSPATH to work with the SSE. This jar contains a class called AVClient that takes care of actually sending the files to SSE as byte arrays and returning the result.
In my project setting, I added three variables to be accessed via the System.getProperty mechanism. For example:
AV_SERVER_HOST=192.168.1.150
AV_SERVER_PORT=1344
AV_SERVER_MODE=SCAN
The AV_SERVER_HOST is the host name or IP of the machine where Scan Engine is installed.
The AV_SERVER_PORT is the port where Scan Engine listens for incoming files.
The AV_SERVER_MODE is the scan mode which can be:
• NOSCAN: No scanning will be done (any keyword that does not start with "SCAN" will result in ignoring the call to the Scan Engine and no files will be transferred for scanning).
• SCAN: Files or the byte stream will be scanned, but the scan engine will not try to repair infections.
• SCANREPAIR: Files will be scanned, the scan engine will try to repair infections, but nothing else will be done.
• SCANREPAIRDELETE: Files will be scanned, the scan engine will try to repair infections, and irreparable files will be deleted.
Note: For the file stream (byte array) scanning, the only meaning full values are "SCAN" and "NOSCAN".
Using the SSE Scanning Java APIs
In any class where scan is required, call the scanning API provided in the AVClient object located in the av.jar. The AVClient object will establish connection to the Scan Engine server and has the following APIs:
Figure 2: The significant APIs for the communication with to the Scan Engine Server.
If scanning a file on the file system, in SCAN only mode, use the call that accepts filename only.
If scanning a file on the file system, with SCANREPAIR or SCANREPAIRDELETE, use the call that accepts input and output file names.
If scanning an in-memory file (byte array), use the call accepting byte array.
For example:
import com.av.*;
Initialize setup parameters:
static String avMode =
(System.getProperty("AV_SERVER_MODE") != null)
? (String) System.getProperty("AV_SERVER_MODE") : "NOSCAN";
static boolean scan = avMode.startsWith("SCAN");
static String avServer =
(String) System.getProperty("AV_SERVER_HOST");
static int avPort =
Integer.parseInt( (String) System.getProperty("AV_SERVER_PORT"));
Scan check example for an in-memory file byte array:
public void scanFile(byte[] fileBytes, String fileName)
throws IOException, Exception {
if (scan) {
AVClient avc = new AVClient(avServer, avPort, avMode);
if (avc.scanfile(fileName, fileBytes) == -1) {
throw new VirusException("WARNING: A virus was detected in
your attachment: " + fileName + "<br>Please scan
your system with the latest antivirus software with
updated virus definitions and try again.");
Note that if you are using this code inside of the MVC handler, you can throw a custom VirusException and check for it in the calling method and perform any necessary cleanup. I have included the class in the AV Jar as well.
For example:
catch (Exception ex) {
logger.error(ex);
if (ex instanceof VirusException) {
// do something here
else {
// there was some other error – handle it
For more details on the Scan Engine Client API, please see Symantec Scan Engine Software Developers Guide.
Continuation in part2part 4:
c) Clienttester.java – This is the gui app set to test if the configuration is working or not. This gui uses the method scanfile(inputfile, outputfile) as you can see the result in the outputpane of the jframe.
* clienttester.java
* Created on April 12, 2005, 2:37 PM
* @author george_maculley
package com.av;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class clienttester
implements ActionListener {
// private String ipaddress = "127.0.0.1";
private String ipaddress = "199.209.150.58";
//private String ipaddress = "192.168.0.55";
static JFrame frame;
JFileChooser chooser = new JFileChooser();
TextField pathtofile = new TextField(System.getProperty("user.home"), 30);
// TextField pathtooutfile= new TextField(System.getProperty("user.home"),30);
private int port = 1344;
JButton filechooser = new JButton("Browse to file"); ;
private String originalfilename;
private String outputfilename;
JButton scanbutton = new JButton("Scan");
TextArea outputarea = new TextArea(20, 40);
TextField iptext = new TextField("127.0.0.1", 16);
TextField porttext = new TextField("1344", 5);
AVClient mine;
JRadioButton choosescan = new JRadioButton("SCAN");
// JRadioButton choosedelete= new JRadioButton("SCANREPAIRDELETE");
/** Creates a new instance of gui */
public clienttester() {
public clienttester(java.lang.String ip, java.lang.String infile, java.lang.String outfile, int port) {
this.ipaddress = ip;
this.port = port;
this.originalfilename = infile;
this.outputfilename = outfile;
boolean setValues(java.lang.String ip, java.lang.String infile, java.lang.String outfile, int port) {
this.ipaddress = ip;
this.port = port;
this.originalfilename = infile;
this.outputfilename = outfile;
return (true);
public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
JComponent c = (JComponent) actionEvent.getSource();
if (c == filechooser) {
int retval = chooser.showDialog(frame, null);
if (retval == JFileChooser.APPROVE_OPTION) {
File theFile = chooser.getSelectedFile();
if (theFile != null) {
pathtofile.setText(theFile.getPath());
// pathtooutfile.setText(theFile.getPath());
JOptionPane.showMessageDialog(frame, "You chose this file: " + theFile.getPath());
if (c == scanbutton) {
//return object that can be passed to AVClient
String policy;
int thisport;
int scanresult;
String thisip;
String inputfile;
String outputfile;
outputarea.append("Server: " + iptext.getText() + "\r\n");
if (choosescan.isSelected()) {
policy = "SCAN";
else {
policy = "SCANREPAIRDELETE";
thisport = new Integer(porttext.getText()).intValue();
thisip = iptext.getText();
//mine= new AVClient(iptext.getText(),porttext.getText(),policy);
mine = new AVClient(iptext.getText(), thisport, policy);
if (mine.test() == 1) {
outputarea.append("Sorry. Incorrect parameters specified.\r\n");
System.exit(1);
else {
outputarea.append("Connection to SAVSE initialized.\r\n");
inputfile = pathtofile.getText();
// outputfile=pathtooutfile.getText();
outputfile = "/tmp";
outputarea.append("Scanning file " + inputfile + " \r\n");
if (policy == "SCAN") {
scanresult = mine.scanfile(inputfile);
else {
scanresult = mine.scanfile(inputfile, outputfile);
if (scanresult == 0) {
outputarea.append("File is clean.\r\n");
else if (scanresult == -1) {
outputarea.append("File is infected. \r\n");
else {
outputarea.append("Scan error.\r\n");
void display() {
Frame f = new Frame("SAVSE JAVA ICAP Client");
f.setLayout(new GridLayout(1, 2));
JPanel lpanel = new JPanel(new GridLayout(7, 1));
JPanel ippanel = new JPanel();
JPanel portpanel = new JPanel();
JPanel rpanel = new JPanel();
JPanel outputpanel = new JPanel();
JPanel buttonpanel = new JPanel();
JPanel pathpanel = new JPanel();
// JPanel outpathpanel= new JPanel();
JPanel policypanel = new JPanel();
ButtonGroup policygroup = new ButtonGroup();
filechooser.addActionListener(this);
scanbutton.addActionListener(this);
choosescan.setSelected(true);
policygroup.add(choosescan);
// policygroup.add(choosedelete);
buttonpanel.setBorder(BorderFactory.createTitledBorder("Scan Policy"));
buttonpanel.add(choosescan);
// buttonpanel.add(choosedelete);
pathpanel.setBorder(BorderFactory.createTitledBorder("Path to File"));
pathpanel.add(pathtofile);
f.setSize(new Dimension(650, 400));
f.setBackground(Color.white);
f.setResizable(true);
ippanel.setBorder(BorderFactory.createTitledBorder("SAVSE IP Address"));
ippanel.add(iptext);
outputpanel.setBorder(BorderFactory.createTitledBorder("OUTPUT"));
outputpanel.add(outputarea);
portpanel.setBorder(BorderFactory.createTitledBorder("ICAP Port"));
portpanel.add(porttext);
// outpathpanel.setBorder(BorderFactory.createTitledBorder("Path to Repair File"));
// outpathpanel.add(pathtooutfile);
lpanel.add(ippanel);
rpanel.add(outputpanel);
lpanel.add(portpanel);
lpanel.add(buttonpanel);
lpanel.add(pathpanel);
// lpanel.add(outpathpanel);
lpanel.add(filechooser);
lpanel.add(scanbutton);
f.add(lpanel);
f.add(rpanel);
f.setVisible(true);
public static void main(String[] args) {
clienttester g = new clienttester();
g.display();
d) my2.java – This is the class file I wrote to test that I am able to send a file and scan it and see the output in the JDEVELOPER. In this case the file is stored on the filesystem of the client machine. JDEVELOPER should be able to see the file.
NOTE:
“EICAR.com” is the test file downloaded from Symantec site to test a non malicious virus file. I n order to be able to test it like this, the Antivirus program running on your machine should be disabled, or else Antivirus will kick in and delete the file. In the first place you will not be able to download the test virus file either with anti virus running on the machine you are downloading to.
package com.av;
import java.io.*;
public class my2 {
static int my_return = 0;
* @param fileBytes
* @param fileName
* @return
public static int scanfile(String fileName){
String avMode = "SCAN";
boolean scan = avMode.startsWith("SCAN");
String avServer = "xx";--avserver ip address
int avPort = 1344;
int the_return = 0;
if (scan) {
AVClient avc = new AVClient(avServer,avPort,avMode);
the_return = avc.scanfile(fileName);
if (the_return == -1) {
return (the_return);
} else
return (the_return);
//my_return = the_return;
return (the_return);
public static void main(String[] args) throws Exception {
System.out.println("Hi there in Main");
byte[] b1 = new byte[4];
b1[1] = 68;
my_return = scanfile("c:\\eicar.com");
System.out.println(my_return);
e) Then finally we have my1.JAVA, which takes the filename, and it’s contents in the bytes form and scans the file. The reason for this method is we are not storing the file on the filesystem, it is read into the memory and only if it is clean, it is put into the database or else notify the user.
package com.av;
import java.io.*;
public class my1 {
static int my_return = 0;
static int a_length = 0;
* @param fileBytes
* @param fileName
* @return
public static int scanfile(String fileName,byte[] fileBytes) throws IOException {
String avMode = "SCAN";
boolean scan = avMode.startsWith("SCAN");
String avServer = "xxx";--avserver’s ip address
int avPort = 1344;
int the_return = 0;
if (scan) {
AVClient avc = new AVClient(avServer,avPort,avMode);
// File file = new File(fileName) ;
//byte[] fBytes = getBytesFromFile(file);
the_return = avc.scanfile(fileName, fileBytes);
if (the_return == -1) {
return (the_return);
} else
{return (the_return);}
my_return = the_return;
return (the_return);
// Returns the contents of the file in a byte array.
* @param file
* @return
* @throws IOException
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
// Get the size of the file
long length = file.length();
// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
// Close the input stream and return bytes
is.close();
return bytes;
// public static void main(String[] args) throws Exception {
//System.out.println("Hi there in Main");
// File file = new File() ;
// byte[] b1 = getBytesFromFile(file);
//System.out.println(b1);
// my_return = scanfile(,b1);
//System.out.println(my_return); }
Finally , you have the exceptions file,
e) package com.av;
public class VirusException
extends Exception {
public VirusException() {
super();
public VirusException(String text) {
super(text);
Once you have all these classes, you can use JDEVELOPER , to load these classes into the database: This is as follows:
Right click on the project, which has all these classes.
NEW -> deployment profiles -> load java and stored procedures.
When you are created deployment profile, you have to specify,
Loadjava options.
-f, -v (check the check boxes)
Under privileges:
-s – specify database schema these classes are loaded into
-s – create sysnonym check box
-g – grant to public or any specific users per your policy.
Under Resolver,
-r and –o (check the check boxes)
I accepted the default name storedproc1. Then you right click on the storedproc1.deploy, deploy to whichever database connection you created.
And then, In order to access this java class we need a pl/sql wrapper as follows:
create or replace package my1 is
function mycheck (pfilename in varchar2, psize in number)
return number;
end my1;
create or replace package body my1 is
function mycheck (pfilename in varchar2, psize in number)
return number is
language java
name 'com.av.my1.scanfile(java.lang.String, byte[]) return int';
end my1;
And the code is invoked from sql plus as follows:
Select my1.mycheck(“filename”, “filebytes”) from dual;
One important catch in the above method is to send the filename and filecontents in bytes form. In order to send the file contents as filebytes, you will need another java class and load into the data base as described above.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
* This program demonstrates how to read a file into a byte array. This method
* reads the entire contents of the file into a byte array.
* @version 1.0
* @author Jeffrey M. Hunter ([email protected])
* @author http://www.idevelopment.info
public class ReadFileIntoByteArray {
* method to convert a byte to a hex string.
* @param data the byte to convert
* @return String the converted byte
public static String byteToHex(byte data) {
StringBuffer buf = new StringBuffer();
buf.append(toHexChar((data >>> 4) & 0x0F));
buf.append(toHexChar(data & 0x0F));
return buf.toString();
* Convenience method to convert an int to a hex char.
* @param i the int to convert
* @return char the converted char
public static char toHexChar(int i) {
if ((0 <= i) && (i <= 9)) {
return (char) ('0' + i);
} else {
return (char) ('a' + (i - 10));
* Returns the contents of the file in a byte array
* @param file File this method should read
* @return byte[] Returns a byte[] array of the contents of the file
private static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
System.out.println("\nDEBUG: FileInputStream is " + file);
// Get the size of the file
long length = file.length();
System.out.println("DEBUG: Length of " + file + " is " + length + "\n");
* You cannot create an array using a long type. It needs to be an int
* type. Before converting to an int type, check to ensure that file is
* not loarger than Integer.MAX_VALUE;
if (length > Integer.MAX_VALUE) {
System.out.println("File is too large to process");
return null;
// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while ( (offset < bytes.length)
( (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) ) {
offset += numRead;
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file " + file.getName());
is.close();
return bytes;
* @param filename
public static byte[] chk_file(String filename) {
byte[] fileArray = null;
try {
fileArray = getBytesFromFile(new File( filename));
} catch (IOException e) {
e.printStackTrace();
if (fileArray != null) {
for (int i=0; i<fileArray.length; i++) {
System.out.println(
"fileArray[" + i + "] = " +
((int)fileArray[i] < 9 ? " " : "") +
( ((int)fileArray[i] > 9 && (int)fileArray[i] <= 99) ? " " : "") +
fileArray[i] + " : " +
" HEX=(0x" + byteToHex(fileArray) + ") : " +
" charValue=(" + (char)fileArray[i] + ")");
return fileArray;
* Sole entry point to the class and application.
* @param args Array of String arguments.
public static void main(String[] args) {
byte[] fileArray = null;
try {
fileArray = getBytesFromFile(new File("c:\\eicar.com"));
} catch (IOException e) {
e.printStackTrace();
if (fileArray != null) {
for (int i=0; i<fileArray.length; i++) {
System.out.println(
"fileArray[" + i + "] = " +
((int)fileArray[i] < 9 ? " " : "") +
( ((int)fileArray[i] > 9 && (int)fileArray[i] <= 99) ? " " : "") +
fileArray[i] + " : " +
" HEX=(0x" + byteToHex(fileArray[i]) + ") : " +
" charValue=(" + (char)fileArray[i] + ")");
Having main method helps you to run the file in JDEVELOPER or using JAVA.
DO not forget to load this class into the database.
And you create the pl/sql wrapper again as follows:
create or replace FUNCTION TOBY (pfilename in varchar2) RETURN VARCHAR2 iS
language java name
'ReadFileIntoByteArray.chk_file(java.lang.String) return byte[]';
And you call the function from sqlplus as follows:
Sql>Set serveroutput on size 20000;
Sql> call dbms_java.set_output(20000);
Sql> Select toby(“filename”) from dual; --
this file should be accessible, I mean you will not be able to send a file on your pc, from sql plus as sql/plus is running on your db server.
You will be able to see the output in sql plus:
If you are running it from the APEX:
When we use file browser widget from APEX, the file is stored in APEX_APPLICATION_FILES table. And we retrieve that into a variable and pass this variable to the function as follows:
DECLARE
scan_failed EXCEPTION;
x varchar2(400);
z number;
BEGIN
select filename into x from wwv_flow_files where name = :P1_FILE_NAME;
select my1.mycheck(x,toby(x)) into z from dual;
if z = 0 then
:P1_SUBJECT:= 'PASSED';
else
:P1_SUBJECT:= 'FAILED';
end if;
:P1_SCAN_RESULT := '** Scanning File **';
IF UPPER(:P1_SUBJECT) = 'PASSED' THEN
BEGIN
:P1_SCAN_FLAG := 'PASSED';
:P1_SCAN_RESULT := :P1_SCAN_RESULT || ' ** File passed scan **';
END;
ELSIF UPPER(:P1_SUBJECT) = 'FAILED' THEN
BEGIN
:P1_SCAN_FLAG := 'FAILED';
:P1_SCAN_RESULT := :P1_SCAN_RESULT || ' ** File failed scan **';
END;
ELSE
BEGIN
:P1_SCAN_FLAG := 'UNKNOWN';
:P1_SCAN_RESULT := :P1_SCAN_RESULT || ' ** Scan Is Not Conclussive **';
END;
END IF;
--IF :P1_SCAN_FLAG = 'FAILED'
-- THEN RAISE scan_failed;
--END IF;
EXCEPTION
WHEN OTHERS THEN
DELETE from APEX_APPLICATION_FILES WHERE name = :P1_FILE_NAME;
RAISE_APPLICATION_ERROR (-20000, 'seb OTHERS error encountered - file upload not allowed. Possible virus detected !');
raise;
END;
ACKNOWLEDMENTS:
1) JOHN SCOTT – who suggested this ICAP API in one of the threads which is my initial starting point in this direction.
2) VLAD KOFMAN who wrote the article on WWW.DEVELOPER.com
3) Mr. KIRAN –One of the engineers from Metalink, who helped me at every step of getting this java programs and pl/sql wrappers working. But for him, I would have not completed my project. -
Powershell: How do I upload files with metadata from a manifest file?
I am using the script from this blog to try to upload files into SharePoint, using a manifest file to specify the metadata associated with each file. Right now, the script works, but is not populating
the metadata from the manifest (xml) file. When I write the $metadataManifest variable out to the console, I get the contents of my xml file, so the code is reading the file when it should. However when it gets to the line in bold ($metadataManifest.Columns.Column),
it does not go into that block...it just skips on to checkin the file. Again the $metadataManifest variable shows all the content in my xml manifest file. Here is what the script looks like...
#Get web and document library objects
$web = Get-SPWeb "http://companySite"
$Library = "My Library"
$docLibrary = $web.Lists[$Library]
$ManifestFilePath = "C:\PowerShellScripts\Manifest.xml"
$LocalPath = "C:\Upload\Test Upload\My Upload Directory\"
if ($ManifestFilePath)
$metadataManifest = (Get-Content ($ManifestFilePath))
write-host "Manifest file: " $metadataManifest
else
write-host "Manifest file not specified for categorising uploaded documents"
#Check for the LibraryStartFolder parameter to specify a root folder
if ($PSBoundParameters.ContainsKey('LibraryStartFolder')) {
$folder = $web.GetFolder($docLibrary.Title + $LibraryStartFolder)
else
$folder = $docLibrary.RootFolder
#Attach to local folder and enumerate through all files
if($IncludeSubFolders) {
$files = Get-ChildItem $LocalPath -Recurse
else
$files = Get-ChildItem $LocalPath
$files | ForEach-Object {
#Check if the object is a folder - if so, create it in doc library
if ($_.PSIsContainer) {
if (($IncludeSubFolders) -and (!$FlattenStructure)) {
#Generate folder path for creation in SharePoint
#by looking at the parent folder on the local path
$spFolderPath = ($_.Parent.FullName.Replace($LocalPath,"")).Replace("\","/")
#Get the folder into which the new folder will be created
#by adding the folder path generated above, if one existed
if ($spFolderPath -eq "") {
$currentFolder = $web.GetFolder($folder.Url)
else
$currentFolder = $web.GetFolder($folder.Url + $spFolderPath)
#Check to see if subfolder already exists
#and create it if not
$testFolder = $currentFolder.SubFolders[$_.Name]
if ($testFolder -eq $null) {
write-host "`nAdding folder" $_.Name "to" $docLibrary.Title "in" $web.Title "..." -foregroundcolor Green
$newFolder = $currentFolder.SubFolders.Add($_.Name)
else
write-host "`nFolder" $_.Name "already exists in" $docLibrary.Title "and shall not be created" -foregroundcolor Red
else
#Generate file path for upload into SharePoint
if ($FlattenStructure) {
$spFilePath = ("/" + $_.Name)
else
$spFilePath = ($_.FullName.Replace($LocalPath,"")).Replace("\","/")
$spFullPath = $folder.Url + "/" + $spFilePath
#Check if the file exists and the overwrite option is selected before adding the file
if ((!$web.GetFile($spFullPath).Exists) -or ($Overwrite)) {
#Add file
write-host "`nCopying" $_.Name "to" $spFullPath.Replace("/" + $_.Name,"") "in" $web.Title "..." -foregroundcolor Green
$spFile = $folder.Files.Add($spFullPath, $_.OpenRead(), $true)
#$spFile = $folder.Files.Add($folder.Url + "/" + $file.Name, [System.IO.Stream]$fileStream, $true)
$spItem = $spFile.Item
#Walk through manifest XML file and configure column values on the file
$metadataManifest.Columns.Column | ForEach-Object {
#Single value text columns
try
if (($_.Type -eq "Text") -or
($_.Type -eq "Choice") -or
($_.Type -eq "Boolean") -or
($_.Type -eq "Number") -or
($_.Type -eq "Currency")) {
$columnName = $_.Name
write-host "Setting value on column"$columnName "..." -foregroundcolor Blue
$_.Values.Value | ForEach-Object {
$spItem[$columnName] = $_
write-host "Value set to"$_
catch {}
#Multiple line text column
try
catch {}
#Multiple choice columns
try
catch {}
#Hyperlink columns
try
catch {}
#Single User column
try
catch {}
#Multiple User column
try
catch {}
#Single value Managed Metadata column
try
catch {}
#Multi value Managed Metadata column
try
catch {}
#Update document with new column values
$spItem.SystemUpdate($false)
#Check in file to document library (if required)
#MinorCheckIn=0, MajorCheckIn=1, OverwriteCheckIn=2
if ($CheckIn) {
if ($spFile.CheckOutStatus -ne "None") {
$spFile.CheckIn("File copied from " + $filePath, 1)
write-host $spfile.Name"checked in"
#Approve file (if required)
if ($Approve) {
if ($spItem.ListItems.List.EnableModeration -eq $true) {
$spFile.Approve("File automatically approved after copying from " + $filePath)
if ($spItem["Approval Status"] -eq 0) { write-host $spfile.Name"approved" }
else
write-host "`nFile"$_.Name "already exists in" $spFullPath.Replace("/" + $_.Name,"") "and shall not be uploaded" -foregroundcolor Red
$web.Dispose()
And here is what the manifest file looks like...
<?xml version="1.0" encoding="utf-8"?>
<Columns>
<Column Name="Column1" Type="Text">
<Values>
<Value>First File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>12585</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More Data</Value>
</Values>
</Column>
</Columns>
<Columns>
<Column Name="Column1" Type="Text">
<Values>
<Value>Second File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>9876</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data2</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More more Data</Value>
</Values>
</Column>
</Columns>
I can't figure out what am doing wrong...why my script is not iterating through the manifest file to upload the document along with the metadata. I would really appreciate any help. ThanksHi Spawn,
Name should not be a problem.. I will probably post you the entire code (I modified it to meet your goals for having multiple column xml nodes as well)
For the code snippet below:
a. In powershell all my changes will have ## prefixed comments
b. in XML I have changed one column name to "Name" to replicate your case and also added a parent node for making the xml well formed.
and the SharePoint output
Please see the code below
$web = Get-SPWeb "http://intranet/sites/test"
$Library = "My Library"
$docLibrary = $web.Lists[$Library]
$ManifestFilePath = "D:\Manifest.xml"
$LocalPath = "D:\UploadPath\"
if ($ManifestFilePath)
##read the xml file as an xml object
[xml]$metadataManifest = (Get-Content ($ManifestFilePath))
write-host "Manifest file: " $metadataManifest
else
write-host "Manifest file not specified for categorising uploaded documents"
#Check for the LibraryStartFolder parameter to specify a root folder
if ($PSBoundParameters.ContainsKey('LibraryStartFolder')) {
$folder = $web.GetFolder($docLibrary.Title + $LibraryStartFolder)
else
$folder = $docLibrary.RootFolder
#Attach to local folder and enumerate through all files
if($IncludeSubFolders) {
$files = Get-ChildItem $LocalPath -Recurse
else
$files = Get-ChildItem $LocalPath
$counter=0
$files | ForEach-Object {
#Check if the object is a folder - if so, create it in doc library
if ($_.PSIsContainer) {
if (($IncludeSubFolders) -and (!$FlattenStructure)) {
#Generate folder path for creation in SharePoint
#by looking at the parent folder on the local path
$spFolderPath = ($_.Parent.FullName.Replace($LocalPath,"")).Replace("\","/")
#Get the folder into which the new folder will be created
#by adding the folder path generated above, if one existed
if ($spFolderPath -eq "") {
$currentFolder = $web.GetFolder($folder.Url)
else
$currentFolder = $web.GetFolder($folder.Url + $spFolderPath)
#Check to see if subfolder already exists
#and create it if not
$testFolder = $currentFolder.SubFolders[$_.Name]
if ($testFolder -eq $null) {
write-host "`nAdding folder" $_.Name "to" $docLibrary.Title "in" $web.Title "..." -foregroundcolor Green
$newFolder = $currentFolder.SubFolders.Add($_.Name)
else
write-host "`nFolder" $_.Name "already exists in" $docLibrary.Title "and shall not be created" -foregroundcolor Red
else
#Generate file path for upload into SharePoint
if ($FlattenStructure) {
$spFilePath = ("/" + $_.Name)
else
$spFilePath = ($_.FullName.Replace($LocalPath,"")).Replace("\","/")
$spFullPath = $folder.Url + "/" + $spFilePath
#Check if the file exists and the overwrite option is selected before adding the file
if ((!$web.GetFile($spFullPath).Exists) -or ($Overwrite)) {
#Add file
write-host "`nCopying" $_.Name "to" $spFullPath.Replace("/" + $_.Name,"") "in" $web.Title "..." -foregroundcolor Green
$spFile = $folder.Files.Add($spFullPath, $_.OpenRead(), $true)
#$spFile = $folder.Files.Add($folder.Url + "/" + $file.Name, [System.IO.Stream]$fileStream, $true)
$spItem = $spFile.Item
## ensure we pick the corresponding node in the columns xml (first file, first xml node, second file - second node likewise)
#Walk through manifest XML file and configure column values on the file
$metadataManifest.FileData.Columns[$counter].Column | ForEach-Object {
#Single value text columns
try
if (($_.Type -eq "Text") -or
($_.Type -eq "Choice") -or
($_.Type -eq "Boolean") -or
($_.Type -eq "Number") -or
($_.Type -eq "Currency")) {
$columnName = $_.Name
write-host "Setting value on column"$columnName "..." -foregroundcolor Blue
$_.Values.Value | ForEach-Object {
$spItem[$columnName] = $_
write-host "Value set to"$_
catch {}
#Multiple line text column
try
catch {}
#Multiple choice columns
try
catch {}
#Hyperlink columns
try
catch {}
#Single User column
try
catch {}
#Multiple User column
try
catch {}
#Single value Managed Metadata column
try
catch {}
#Multi value Managed Metadata column
try
catch {}
#Update document with new column values
$spItem.SystemUpdate($false)
##increment the counter to read the next xml node
$counter++
#Check in file to document library (if required)
#MinorCheckIn=0, MajorCheckIn=1, OverwriteCheckIn=2
if ($CheckIn) {
if ($spFile.CheckOutStatus -ne "None") {
$spFile.CheckIn("File copied from " + $filePath, 1)
write-host $spfile.Name"checked in"
#Approve file (if required)
if ($Approve) {
if ($spItem.ListItems.List.EnableModeration -eq $true) {
$spFile.Approve("File automatically approved after copying from " + $filePath)
if ($spItem["Approval Status"] -eq 0) { write-host $spfile.Name"approved" }
else
write-host "`nFile"$_.Name "already exists in" $spFullPath.Replace("/" + $_.Name,"") "and shall not be uploaded" -foregroundcolor Red
$web.Dispose()
and the xml file
<?xml version="1.0" encoding="utf-8"?>
<FileData>
<Columns>
<Column Name="Name" Type="Text">
<Values>
<Value>First File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>12585</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More Data</Value>
</Values>
</Column>
</Columns>
<Columns>
<Column Name="Name" Type="Text">
<Values>
<Value>Second File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>12585</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More Data</Value>
</Values>
</Column>
</Columns>
<Columns>
<Column Name="Name" Type="Text">
<Values>
<Value>Third File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>12585</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More Data</Value>
</Values>
</Column>
</Columns>
<Columns>
<Column Name="Name" Type="Text">
<Values>
<Value>Fourth File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>12585</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More Data</Value>
</Values>
</Column>
</Columns>
<Columns>
<Column Name="Name" Type="Text">
<Values>
<Value>Fifth File</Value>
</Values>
</Column>
<Column Name="Column2" Type="Text">
<Values>
<Value>12585</Value>
</Values>
</Column>
<Column name="Column3" type="Text">
<Values>
<Value>Some Data</Value>
</Values>
</Column>
<Column name="Column4" type="Text">
<Values>
<Value>More Data</Value>
</Values>
</Column>
</Columns>
</FileData>
Thanks and Regards,
Partha
AvePoint
Maybe you are looking for
-
Can I use the early 2009 iMac 24" with a non-thunderbolt 27" cinema display?
Is this possible, and if so, presumably the displays - bottom levels of the glass will be at different heights? Thanks
-
I ordered Adobe XI pro last year and need to reinstall it. I cannot find my serial number. I downloaded the software online. Can you look up my order. I ordered it last year around this time.@
-
I cannot download anything on my iMac what could be the cause?
I cannot download on my iMac, what could be the cause?
-
dear all : I am using form 6. Does anyone know how can I change the small Form runtime icon on the upper left corner of MDI window to a custom logo ? I have changed the logo in the 'child' window successfully using 'SET_WINDOW_PROPERTY('WIN_1',ICON_N
-
How do I permenently delete yahoo bulk mail folder on my Mac ? I
How do I permenently delete yahoo bulk mail folder on my iMac?